Requête de modèle de page avec WP_Query

14

Je voudrais interroger uniquement les pages avec un certain modèle de page avec WP_Queryou une fonction qui retournerait l'objet post, mais je ne trouve aucune information à ce sujet sur le codex officiel.

Alexandre Kirszenberg
la source

Réponses:

23

Essayez ceci ... En supposant que le nom du modèle est '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...

Vous pouvez également utiliser get_posts ou modifier les messages de requête pour effectuer le travail. Ces deux fonctions utilisent les mêmes paramètres que WP_Query .

Rutwick Gangurde
la source
20

Incorrect: à partir de wordpress 3, vous avez besoin de quelque chose comme:

$args = array(
    'post_type'  => 'page', 
    'meta_query' => array( 
        array(
            'key'   => '_wp_page_template', 
            'value' => 'my_template.php'
        )
    )
);
BenJam
la source
MERCI!! A parcouru cette page trop rapidement, a utilisé la réponse acceptée. Cela suffit. Pour n'importe qui d'autre, notez le tableau à l'intérieur du tableau à l'intérieur du tableau ...
Jeremy Carlson
3
La seule différence ici est le post_type. Sinon, vous n'avez pas besoin du meta_querytableau pour une seule paire clé / valeur personnalisée.
Rutwick Gangurde
Bien sûr, la méta-requête est nécessaire. Sauf qu'il peut être "en ligne" avec meta_keyet meta_valueou avec un tableau simple, qui peut inclure plusieurs conditions.
Maxime Culea
0

Si la tentative de quelqu'un aboutit incorrectement à zéro publication, le nom du modèle est probablement incorrect. J'ai essayé le nom du fichier php et le nom de mon modèle et ils n'ont pas fonctionné. J'ai alors décidé d'inspecter la boîte de sélection des modèles où nous sélectionnons le modèle dans l'éditeur de page. J'ai trouvé ça:

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

J'ai utilisé templates-map/component-tutorial-1.phpet cela a fonctionné.

Ivan Gomes
la source
0

Si vous avez le modèle dans un autre dossier:

$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
la source