Chciałbym zapytać tylko o strony z określonym szablonem strony WP_Query
lub funkcją, która zwróciłaby obiekt postu, ale nie mogę znaleźć żadnych informacji na ten temat w oficjalnym kodeksie.
Chciałbym zapytać tylko o strony z określonym szablonem strony WP_Query
lub funkcją, która zwróciłaby obiekt postu, ale nie mogę znaleźć żadnych informacji na ten temat w oficjalnym kodeksie.
Odpowiedzi:
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 .
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'
)
)
);
post_type
. W przeciwnym razie nie potrzebujesz meta_query
tablicy dla pojedynczej niestandardowej pary klucz / wartość.
meta_key
a meta_value
lub o prostym szeregu, która może zawierać wiele warunków.
Szablon strony jest przechowywany jako wartość meta z kluczem „_wp_page_template”.
Wystarczy zatem użyć tego klucza w parametrze meta zapytania. Dla przykładów
i http://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters
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.php
i zadziałało.
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
)
)
);