Interogare șablon pagină cu WP_Query

30 sept. 2011, 22:20:18
Vizualizări: 47.2K
Voturi: 21

Aș dori să interoghez doar paginile cu un anumit șablon de pagină folosind WP_Query sau o funcție care să returneze obiectul post, dar nu pot găsi nicio informație despre acest lucru în codexul oficial.

0
Toate răspunsurile la întrebare 5
2
27

ACTUALIZARE: Acesta este un răspuns vechi de un deceniu, destinat unei versiuni foarte vechi de WordPress. Văd comentariile care mă informează că acest lucru s-ar putea să nu funcționeze pentru versiunile mai noi de WP, vă rugăm să consultați celelalte răspunsuri de mai jos dacă al meu nu funcționează pentru versiunea voastră de WP. Pentru WP 2.*, acesta va funcționa.

Încercați aceasta... Presupunând că numele șablonului este 'my_template.php',

$query = new WP_Query(
    array(
        'post_type' => 'page',
        'meta_key' => '_wp_page_template',
        'meta_value' => 'my_template.php'
    )
);
//Aici urmează bucla...

De asemenea, puteți folosi get_posts, sau modifica query posts pentru a finaliza sarcina. Ambele funcții folosesc aceiași parametri ca WP_Query.

1 oct. 2011 06:18:16
Comentarii

Acest răspuns nu este actualizat. Consultați răspunsul lui Guille Holmann / BenJam mai jos.

Nadav Nadav
29 mar. 2021 13:01:44

Da, acesta este un răspuns vechi, pentru o versiune mai veche de WP. Cel mai probabil, internale s-au schimbat. Răspunsul meu este din 2011, iar al lor din 2018/19. Este o diferență mare de timp!

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

Incorect: începând cu WordPress 3, aveți nevoie de ceva similar cu:

$args = array(
    'post_type'  => 'page', 
    'meta_query' => array( 
        array(
            'key'   => '_wp_page_template', 
            'value' => 'my_template.php'
        )
    )
);
18 mai 2012 20:12:18
Comentarii

MULȚUMESC!! Am parcurs această pagină prea repede și am folosit răspunsul acceptat. Aceasta funcționează. Pentru oricine altcineva, rețineți matricea din interiorul matricei din interiorul matricei...

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

Singura diferență aici este post_type. Altfel, nu ai nevoie de matricea meta_query pentru o singură pereche cheie/valoare personalizată.

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

Desigur, interogarea meta este necesară. Cu excepția faptului că ar putea fi "inline" cu meta_key și meta_value sau cu o matrice simplă, care ar putea include mai multe condiții.

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

Răspunsul acceptat are zece ani vechime și este pentru o versiune mai veche. Nu înseamnă că este incorect, doar că este depășit pentru versiunile noi de WP. Am actualizat răspunsul meu pentru a specifica acest lucru.

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

Dacă șablonul se află într-un alt folder:

$args = array(
    'post_type' => 'page', // este o Pagină, corect?
    'post_status' => 'publish',   
    'meta_query' => array(
        array(
            'key' => '_wp_page_template',
            'value' => 'page-templates/nume-sablon.php', // folder + numele șablonului așa cum este stocat în baza de date
        )
    )
);
9 sept. 2019 16:05:48
0

Șablonul paginii este stocat ca o valoare meta cu cheia "_wp_page_template".

Deci tot ce trebuie să faci este să folosești acea cheie într-un parametru de interogare meta. De exemplu:

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

și http://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters

1 oct. 2011 05:07:55
0

Dacă încercarea cuiva are ca rezultat zero postări, probabil numele șablonului este greșit. Am încercat numele fișierului php și numele șablonului meu, dar nu au funcționat. Apoi am decis să inspectez caseta de selecție a șabloanelor unde alegem șablonul în editorul de pagini. Am găsit asta:

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

Am folosit templates-map/component-tutorial-1.php și a funcționat.

5 sept. 2018 02:09:14