Holen Sie Seiten-IDs basierend auf der verwendeten Vorlage?

Ich habe eine Situation, in der ich ein Dropdown-Menü mit Seiten in einem Widget bereitstellen muss, abhängig davon, ob sie eine bestimmte Vorlage verwenden. Mit anderen Worten, für alle Seiten, die die Vorlage ‘Foo’ verwenden, erhalten Sie die Post-ID.

Ich habe den Rest des Widgets codiert, aber ich benutze ein Eingabefeld für die Eingabe einer Seiten-ID (was bei nicht-technischen Benutzern unordentlich werden kann, die Seiten-ID zu verwenden) – ich würde eher eine bereitstellen Wählen Sie das Feld mit dem Seitentitel der Seiten unter Verwendung der spezifischen Vorlage aus.

Ich habe versucht, das WP_Query-Objekt mit diesem zu bekommen:

$the_query = new WP_Query(array( 'meta_key' => '_wp_page_template', 'meta_value' => 'templates/_partner.php' )); 

Der Meta-Wert ist corrent (entspricht 2 Einträgen in der database), aber ich bekomme keine Ergebnisse auf der Widget-Seite. Das Auswahlfeld ist leer.

Können Sie WP_Query nicht von einem Widget aus aufrufen, oder muss ich anderswo nach dieser Lösung suchen?

UPDATE Ich habe die Anfrage $ the_query-> für die SQL überprüft, die das ausführt, und es gibt keine Zeilen zurück. Es stellt sich heraus, dass mir die ‘post_type’ => ‘Seite’ in der Abfrage fehlte.

Solutions Collecting From Web of "Holen Sie Seiten-IDs basierend auf der verwendeten Vorlage?"

WP_Query wird standardmäßig nur über Posts aufgerufen.

Fügen Sie die page als Post-Typ hinzu:

 $the_query = new WP_Query(array( 'post_type' => 'page', /* overrides default 'post' */ 'meta_key' => '_wp_page_template', 'meta_value' => 'templates/_partner.php' )); 

Siehe: WP_Query – Typparameter

Sie können wp_dropdown_pages() um direkt eine Dropdown-Liste der Seiten zu erstellen, die Sie anzeigen möchten:

 $args = array( 'name' => '_partner_page', // "name" attr of the  

Es gibt viele Pakete, die du an wp_dropdown_pages() übergeben wp_dropdown_pages() . Neben den functionen auf der Codex-Seite dieser function können Sie auch jedes Argument übergeben, das in der function get_pages() ist, da wp_dropdown_pages() get_pages() , um die Liste der Seiten abzurufen, die als Dropdown-Liste angezeigt werden.

 $query= new WP_Query(array( 'post_type' => 'page', /* overrides default 'post' */ 'meta_key' => '_wp_page_template', 'meta_value' => 'page-templates/{template name}.php' )); 

Dies funktionierte für mich, weil mein benutzerdefiniertes Thema den Seitenvorlagenordner verwendete.