Seitenvorlagenabfrage mit WP_Query

14

Ich möchte nur Seiten mit einer bestimmten Seitenvorlage WP_Queryoder einer Funktion abfragen , die das Post-Objekt zurückgibt, aber ich kann im offiziellen Codex keine Informationen dazu finden.

Alexandre Kirszenberg
quelle

Antworten:

23

Versuchen Sie Folgendes ... Angenommen, der Vorlagenname lautet 'my_template.php'.

$query = new WP_Query(
    array(
        'post_type' => 'page',
        'meta_key' => '_wp_page_template',
        'meta_value' => 'my_template.php'
    )
);
//Down goes the loop...

Sie können auch get_posts verwenden oder Abfrageposts ändern , um die Aufgabe zu erledigen. Beide Funktionen verwenden dieselben Parameter wie WP_Query .

Rutwick Gangurde
quelle
20

Falsch: Ab WordPress 3 benötigen Sie etwas Ähnliches wie:

$args = array(
    'post_type'  => 'page', 
    'meta_query' => array( 
        array(
            'key'   => '_wp_page_template', 
            'value' => 'my_template.php'
        )
    )
);
BenJam
quelle
VIELEN DANK!! Diese Seite viel zu schnell überflogen, die akzeptierte Antwort verwendet. Das macht es. Für alle anderen beachten Sie das Array innerhalb des Arrays innerhalb des Arrays ...
Jeremy Carlson
3
Der einzige Unterschied ist hier der post_type. Andernfalls benötigen Sie das meta_queryArray nicht für ein einzelnes benutzerdefiniertes Schlüssel / Wert-Paar.
Rutwick Gangurde
Natürlich wird die Meta-Abfrage benötigt. Außer es könnte "inline" mit meta_keyund meta_valueoder mit einem einfachen Array sein, das mehrere Bedingungen enthalten könnte.
Maxime Culea
0

Wenn jemand falsch versucht, keine Beiträge zu verfassen, ist der Name der Vorlage wahrscheinlich falsch. Ich habe den Namen der PHP-Datei und meinen Vorlagennamen ausprobiert und sie haben nicht funktioniert. Dann habe ich beschlossen, das Auswahlfeld für Vorlagen zu überprüfen, in dem wir die Vorlage im Seiteneditor auswählen. Ich habe das gefunden:

<option value="templates-map/component-tutorial-1.php" 
 selected="selected">Tutorial -1</option>

Ich habe verwendet templates-map/component-tutorial-1.phpund es hat funktioniert.

Ivan Gomes
quelle
0

Wenn Sie die Vorlage in einem anderen Ordner haben:

$args = array(
    'post_type' => 'page', //it is a Page right?
    'post_status' => 'publish',   
    'meta_query' => array(
        array(
            'key' => '_wp_page_template',
            'value' => 'page-templates/template-name.php', // folder + template name as stored in the dB
        )
    )
);
Guille Holmann
quelle