it-swarm.com.de

Auflisten von Seiten, die eine bestimmte Vorlage verwenden

Ich habe eine Vorlage mit dem Namen product.php mit der folgenden Überschrift erstellt:

<?php
/*
Template Name: Product Page
*/

Wie kann ich in einer Seitenleiste jede Seite auflisten, die die Vorlage "Produktseite" verwendet?

Ich habe versucht, die wp_list_pages()-Funktionsdokumentation zu lesen, aber es schien nur möglich zu sein, das Filtern nach post_type aufzulisten, nicht nach der verwendeten Vorlage.

4
João Paulin

Sie können dies mit einem WP_Querymeta_query tun. Der Dateiname der Seitenvorlage wird in Post-Meta unter dem Schlüssel _wp_page_template gespeichert:

$args = array(
    'post_type' => 'page',
    'posts_per_page' => -1,
    'meta_query' => array(
        array(
            'key' => '_wp_page_template',
            'value' => 'product.php'
        )
    )
);
$the_pages = new WP_Query( $args );

if( $the_pages->have_posts() ){
    while( $the_pages->have_posts() ){
        $the_pages->the_post();
        the_title();
    }
}
wp_reset_postdata();
2
Milo

die Seitenvorlage wird über ein Metafeld mit dem Schlüssel '_wp_page_template' eingestellt. Der Wert für dieses Meta-Feld ist der vollständige PHP-Dateiname der Vorlagendatei, so etwas wie

'page-products.php'

so können Sie eine benutzerdefinierte Funktion erstellen, um die Seite mit einer bestimmten Vorlage einfach abzurufen. Verwenden Sie dazu meta_key und meta_value param off get_pages (oder verwenden Sie einen WP_Query mit 'meta_query'-Argument):

get_pages_by_template( $template = '', $args = array() ) {
  if ( empty($template) ) return false;
  if ( strpos($template, '.php') !== (strlen($template) - 4) )  $template .= '.php';
  $args['meta_key'] = '_wp_page_template';
  $args['meta_value'] = $template;
  return get_pages($args);
}

Diese Funktion akzeptiert als erstes (obligatorisches) Argument die Vorlage und als zweites (optionales) Argument alle Argumente von get_pages .

die Vorlage kann mit oder ohne '.php'-Erweiterung übergeben werden:

$pages = get_pages_by_template('page-products');

oder

$pages = get_pages_by_template('page-products.php');

Danach können Sie die abgerufene Seite wie gewünscht verwenden: Durchschleifen und Markup ausgeben, ein benutzerdefiniertes Widget erstellen, das die Funktion verwendet, und so weiter ...

1
gmazzap