_wp_page_template, um die Vorlage dynamisch zu verwenden

Ich frage mich, ob es überhaupt möglich ist, eine vom Benutzer gewählte Seitenvorlage im Kontext eines query_posts mit get_template_part . Mit anderen Worten, ich habe eine Seitenvorlage eingerichtet, um alle untergeordneten Seiten abzurufen und anzuzeigen, aber ich muss jede untergeordnete Seite entsprechend der Seitenvorlage anzeigen, die im Seiteneditor ausgewählt wurde. Gibt es eine Möglichkeit, dies zu erreichen? Hier ist der Code, den ich für die Vorlage der Elternseite bisher habe.

 'page', 'posts_per_page' => -1, 'post_parent' => $this_page, 'orderby' => 'menu_order', 'order' => 'ASC') ); if(have_posts()): while(have_posts()): the_post(); ?>   

Wie Sie sehen können, habe ich die Abfrage, die alle untergeordneten Seiten aufruft. Ich würde gerne wissen, wie ich jede dieser untergeordneten Seiten entsprechend ihrer gewählten Seitenvorlage anzeigen kann.

Vielen Dank.

Solutions Collecting From Web of "_wp_page_template, um die Vorlage dynamisch zu verwenden"

Das Wichtigste zuerst, verwende niemals query_posts , überschreibt die Hauptabfrage und kann unerwünschte Nebeneffekte verursachen. Verwenden WP_Query stattdessen WP_Query .

_wp_page_template ist ein Post- _wp_page_template , also müssen wir zuerst den in diesem Schlüssel gespeicherten Wert für jede Seite mit get_post_meta . Das gibt uns den Dateinamen, den wir dann laden können.

 $this_page = get_queried_object_id(); $child_pages = new WP_Query( array( 'post_type'=>'page', 'posts_per_page' => -1, 'post_parent' => $this_page, 'orderby' => 'menu_order', 'order' => 'ASC' ) ); if( $child_pages->have_posts() ){ while( $child_pages->have_posts() ){ $child_pages->the_post(); // get the filename stored in _wp_page_template $template = get_post_meta( get_the_ID(), '_wp_page_template', true ); // load the file if it exists locate_template( $template, true, false ); } // restore the global $post after secondary queries wp_reset_postdata(); } 

Um die Seitenvorlage (Teil) vom Administrator zu speichern, verwende ich ein benutzerdefiniertes Meta-Feld und speichere den Namen der Vorlage_Teile auf jeder Seite / jedem Post. Rufen Sie dann das Post-Meta in der Vorlage auf und übergeben Sie es an get_template_part .

 // meta saved in admin is "child_template_type => "child_part_one" // where the meta_key = "child_template_type" // and meta_value = "child_part_one" $part = get_post_meta($this_id, 'child_template_type'); get_template_part($part); // same as get_template_part('child_part_one') 

Ich würde empfehlen, erweiterte benutzerdefinierte Felder zu verwenden. Erstellen Sie eine Feldgruppe mit einer Auswahloption und geben Sie die Namen der Vorlage_Teil manuell ein. Auf diese Weise können Sie den Wert als tatsächlichen Teildateinamen speichern und dem Benutzer einen schönen Namen für jeden Namen anzeigen lassen

 child_part_one : View One child_part_two : View Two 
  1. Erstellen Sie eine Feldgruppe namens “Child List Template Parts” (oder etwas;))
  2. Fügen Sie ein neues Feld mit Auswahl> Auswählen als Feldtyp hinzu und nennen Sie es “child_template_part”
  3. Definieren Sie die Optionen (oben) im Feld “Auswahlmöglichkeiten”
  4. Fügen Sie die Post-Typ-Regeln in dem Abschnitt “Speicherort” hinzu
  5. Speichern Sie die Feldgruppe und bearbeiten Sie Ihren Post / Ihre Seite, um den Vorlageteil auszuwählen

Um den Vorlageteil mit ACF zu erhalten

 $part = get_field('child_template_part', $this_id); get_template_part($part);