Zapytanie szablonu strony za pomocą WP_Query

14

Chciałbym zapytać tylko o strony z określonym szablonem strony WP_Querylub funkcją, która zwróciłaby obiekt postu, ale nie mogę znaleźć żadnych informacji na ten temat w oficjalnym kodeksie.

Alexandre Kirszenberg
źródło

Odpowiedzi:

23

Spróbuj tego ... Zakładając, że nazwa szablonu to „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...

Możesz także użyć get_posts lub zmodyfikować posty z zapytaniami, aby wykonać zadanie. Obie te funkcje używają tych samych parametrów, co WP_Query .

Rutwick Gangurde
źródło
20

Niepoprawnie: od Wordpress 3 potrzebujesz czegoś podobnego do:

$args = array(
    'post_type'  => 'page', 
    'meta_query' => array( 
        array(
            'key'   => '_wp_page_template', 
            'value' => 'my_template.php'
        )
    )
);
BenJam
źródło
DZIĘKUJĘ CI!! Zbyt szybko przejrzałem tę stronę, użyłem zaakceptowanej odpowiedzi. To robi Dla wszystkich innych zwróć uwagę na tablicę wewnątrz tablicy wewnątrz tablicy ...
Jeremy Carlson,
3
Jedyną różnicą jest tutaj post_type. W przeciwnym razie nie potrzebujesz meta_querytablicy dla pojedynczej niestandardowej pary klucz / wartość.
Rutwick Gangurde
Oczywiście potrzebne jest meta-zapytanie. Z wyjątkiem może być „inline” z meta_keya meta_valuelub o prostym szeregu, która może zawierać wiele warunków.
Maxime Culea
0

Jeśli jakakolwiek próba niepoprawnie zakończy się zerowymi postami, prawdopodobnie nazwa szablonu jest nieprawidłowa. Próbowałem nazwy pliku php i nazwy mojego szablonu i nie działały. Następnie postanowiłem sprawdzić pole wyboru szablonów, w którym wybieramy szablon w edytorze stron. Znalazłem to:

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

Użyłem templates-map/component-tutorial-1.phpi zadziałało.

Ivan Gomes
źródło
0

Jeśli szablon znajduje się w innym folderze:

$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
źródło