Запрос шаблона страницы с WP_Query

14

Я хотел бы запрашивать только страницы с определенным шаблоном страницы WP_Queryили функцией, которая возвращала бы объект post, но я не могу найти никакой информации об этом в официальном кодексе.

Александр Кирзенберг
источник

Ответы:

23

Попробуйте это ... Предполагая, что имя шаблона '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 .

Рутвик Гангурде
источник
20

Неправильно: с WordPress 3 вам нужно что-то похожее на:

$args = array(
    'post_type'  => 'page', 
    'meta_query' => array( 
        array(
            'key'   => '_wp_page_template', 
            'value' => 'my_template.php'
        )
    )
);
BenJam
источник
БЛАГОДАРЮ ВАС!! Слишком быстро просмотрел эту страницу, использовал принятый ответ. Это делает это. Для кого-то еще, обратите внимание на массив внутри массива внутри массива ...
Джереми Карлсон
3
Единственная разница здесь - это post_type. В противном случае вам не нужен meta_queryмассив для одной пользовательской пары ключ / значение.
Рутвик Гангурде
Конечно, мета-запрос необходим. За исключением того, что может быть «инлайн» с meta_keyи meta_valueили с простым массивом, который может включать в себя несколько условий.
Максим Кулеа,
1

Шаблон страницы хранится в виде мета-значения с ключом "_wp_page_template".

Поэтому все, что вам нужно, это использовать этот ключ в параметре мета-запроса. Например

См. Http://codex.wordpress.org/Displaying_Posts_Using_a_Custom_Select_Query#Query_based_on_Custom_Field_and_Sorted_by_Value

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

anmari
источник
0

Если чья-либо попытка неверно приведет к нулю сообщений, возможно, имя шаблона неверно. Я попробовал имя файла php и имя моего шаблона, и они не работали. Тогда я решил проверить окно выбора шаблонов, где мы выбираем шаблон в редакторе страниц. Я нашел это:

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

Я использовал, templates-map/component-tutorial-1.phpи это сработало.

Иван Гомес
источник
0

Если у вас есть шаблон в другой папке:

$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
        )
    )
);
Гиль Холманн
источник