web-dev-qa-db-fra.com

Liste des pages utilisant un modèle spécifique

J'ai créé un modèle nommé product.php avec l'en-tête suivant:

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

Comment puis-je lister, dans une barre latérale, chaque page qui utilise le modèle "Product Page"?

J'ai essayé de lire la documentation de la fonction wp_list_pages(), mais il semblait seulement possible de lister le filtrage par post_type et non par le modèle utilisé.

4
João Paulin

Vous pouvez le faire avec un WP_Querymeta_query . Le nom de fichier du modèle de page est stocké dans post meta sous la clé _wp_page_template:

$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

le modèle de page est défini via un champ méta avec la clé '_wp_page_template'. La valeur de ce champ méta est le nom de fichier complet php du fichier de modèle, quelque chose comme

'page-products.php'

vous pouvez donc créer une fonction personnalisée pour obtenir facilement la page avec un modèle spécifique en utilisant meta_key et meta_value param off get_pages (ou en utilisant un WP_Query avec un argument 'meta_query'):

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);
}

Cette fonction accepte comme premier argument (obligatoire) le modèle et comme second argument (facultatif) tous les arguments de get_pages .

le modèle peut être passé avec ou sans l'extension '.php':

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

ou

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

Ensuite, vous pouvez utiliser la page récupérée à votre guise: parcourez-la et affichez des balises, créez un widget personnalisé utilisant la fonction, etc.

1
gmazzap