Query del template di pagina con WP_Query

30 set 2011, 22:20:18
Visualizzazioni: 47.2K
Voti: 21

Vorrei eseguire una query solo delle pagine con un determinato template di pagina utilizzando WP_Query o una funzione che restituisca l'oggetto post, ma non riesco a trovare informazioni a riguardo nel codex ufficiale.

0
Tutte le risposte alla domanda 5
2
27

AGGIORNAMENTO: Questa è una risposta di dieci anni fa, pensata per una versione molto vecchia di WordPress. Vedo dai commenti che alcuni mi informano che potrebbe non funzionare per le versioni più recenti di WP, vi invito a consultare le altre risposte qui sotto se la mia non funziona per la vostra versione di WP. Per WP 2.*, questa soluzione funzionerà.

Prova questo... Assumendo che il nome del template sia 'my_template.php',

$query = new WP_Query(
    array(
        'post_type' => 'page',
        'meta_key' => '_wp_page_template',
        'meta_value' => 'my_template.php'
    )
);
//Qui sotto va il loop...

Puoi anche usare get_posts, o modificare query posts per ottenere lo stesso risultato. Entrambe queste funzioni utilizzano gli stessi parametri di WP_Query.

1 ott 2011 06:18:16
Commenti

Questo non è aggiornato. Vedi la risposta di Guille Holmann / BenJam più sotto.

Nadav Nadav
29 mar 2021 13:01:44

Sì, è una vecchia risposta, per una versione più datata di WP. Molto probabilmente gli interni sono cambiati. La mia risposta è del 2011, le loro del 2018/19. C'è un bel divario!

Rutwick Gangurde Rutwick Gangurde
9 apr 2021 14:00:04
4
27

Errato: a partire da WordPress 3 è necessario qualcosa di simile a:

$args = array(
    'post_type'  => 'page', // Tipo di post (pagina)
    'meta_query' => array( // Query sui metadati
        array(
            'key'   => '_wp_page_template', // Chiave del meta (template pagina)
            'value' => 'my_template.php' // Valore da cercare (nome template)
        )
    )
);
18 mag 2012 20:12:18
Commenti

GRAZIE!! Ho letto questa pagina troppo velocemente, ho usato la risposta accettata. Questa funziona. Per chiunque altro, nota l'array dentro l'array dentro l'array...

Jeremy Carlson Jeremy Carlson
27 apr 2016 01:40:33

L'unica differenza qui è il post_type. Altrimenti non ti serve l'array meta_query per una singola coppia chiave/valore personalizzata.

Rutwick Gangurde Rutwick Gangurde
16 nov 2016 08:21:55

Ovviamente la meta query è necessaria. Solo che potrebbe essere "in linea" con meta_key e meta_value oppure con un semplice array, che potrebbe includere più condizioni.

Maxime Culea Maxime Culea
14 feb 2020 18:04:38

La risposta accettata è vecchia di un decennio, relativa a una versione precedente. Non la rende errata, semplicemente obsoleta per le versioni più recenti di WP. Ho aggiornato la mia risposta per specificare questo.

Rutwick Gangurde Rutwick Gangurde
9 apr 2021 14:06:24
0

Se hai il template all'interno di un'altra cartella:

$args = array(
    'post_type' => 'page', // è una Pagina, giusto?
    'post_status' => 'publish',   
    'meta_query' => array(
        array(
            'key' => '_wp_page_template',
            'value' => 'page-templates/template-name.php', // cartella + nome template così come salvato nel database
        )
    )
);
9 set 2019 16:05:48
0

Il template della pagina è memorizzato come un valore meta con la chiave "_wp_page_template".

Quindi tutto ciò che serve è utilizzare quella chiave in un parametro di query meta. Per esempi

Vedi http://codex.wordpress.org/Displaying_Posts_Using_a_Custom_Select_Query#Query_based_on_Custom_Field_and_Sorted_by_Value

e http://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters

1 ott 2011 05:07:55
0

Se il tentativo di qualcuno restituisce erroneamente zero post, probabilmente il nome del template è sbagliato. Ho provato il nome del file php e il nome del mio template ma non hanno funzionato. Poi ho deciso di ispezionare il menu a tendina dei template dove si seleziona il template nell'editor della pagina. Ho trovato questo:

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

Ho usato templates-map/component-tutorial-1.php e ha funzionato.

5 set 2018 02:09:14