Я хотел бы запрашивать только страницы с определенным шаблоном страницы WP_Query
или функцией, которая возвращала бы объект post, но я не могу найти никакой информации об этом в официальном кодексе.
Я хотел бы запрашивать только страницы с определенным шаблоном страницы WP_Query
или функцией, которая возвращала бы объект post, но я не могу найти никакой информации об этом в официальном кодексе.
Ответы:
Попробуйте это ... Предполагая, что имя шаблона '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...
Вы также можете использовать get_posts или изменить сообщения запросов, чтобы выполнить работу. Обе эти функции используют те же параметры, что и WP_Query .
Неправильно: с WordPress 3 вам нужно что-то похожее на:
$args = array(
'post_type' => 'page',
'meta_query' => array(
array(
'key' => '_wp_page_template',
'value' => 'my_template.php'
)
)
);
post_type
. В противном случае вам не нужен meta_query
массив для одной пользовательской пары ключ / значение.
meta_key
и meta_value
или с простым массивом, который может включать в себя несколько условий.
Шаблон страницы хранится в виде мета-значения с ключом "_wp_page_template".
Поэтому все, что вам нужно, это использовать этот ключ в параметре мета-запроса. Например
и http://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters
Если чья-либо попытка неверно приведет к нулю сообщений, возможно, имя шаблона неверно. Я попробовал имя файла php и имя моего шаблона, и они не работали. Тогда я решил проверить окно выбора шаблонов, где мы выбираем шаблон в редакторе страниц. Я нашел это:
<option value="templates-map/component-tutorial-1.php"
selected="selected">Tutorial -1</option>
Я использовал, templates-map/component-tutorial-1.php
и это сработало.
Если у вас есть шаблон в другой папке:
$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
)
)
);