Запрос шаблона страницы с помощью WP_Query

30 сент. 2011 г., 22:20:18
Просмотры: 47.2K
Голосов: 21

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

0
Все ответы на вопрос 5
2
27

ОБНОВЛЕНИЕ: Этот ответ написан десять лет назад и предназначен для очень старой версии WordPress. Я вижу комментарии, в которых говорится, что это может не работать в новых версиях WP. Пожалуйста, обратитесь к другим ответам ниже, если мой не работает для вашей версии WP. Для WP 2.* этот способ будет работать.

Попробуйте это... Предполагая, что имя шаблона — 'my_template.php',

$query = new WP_Query(
    array(
        'post_type' => 'page',
        'meta_key' => '_wp_page_template',
        'meta_value' => 'my_template.php'
    )
);
// Здесь начинается цикл...

Вы также можете использовать get_posts или изменить query posts, чтобы выполнить задачу. Обе эти функции используют те же параметры, что и WP_Query.

1 окт. 2011 г. 06:18:16
Комментарии

Это устарело. Смотрите ответ Guille Holmann / BenJam ниже.

Nadav Nadav
29 мар. 2021 г. 13:01:44

Да, это старый ответ для более ранней версии WP. Внутренняя реализация, скорее всего, изменилась. Мой ответ от 2011 года, а их — от 2018/19. Это большая разница!

Rutwick Gangurde Rutwick Gangurde
9 апр. 2021 г. 14:00:04
4
27

Неверно: начиная с WordPress 3 вам нужно что-то вроде:

$args = array(
    'post_type'  => 'page', 
    'meta_query' => array( 
        array(
            'key'   => '_wp_page_template', 
            'value' => 'my_template.php'
        )
    )
);
18 мая 2012 г. 20:12:18
Комментарии

СПАСИБО!! Слишком быстро пробежался глазами по странице, использовал принятый ответ. Это работает. Для остальных замечу, что здесь массив внутри массива внутри массива...

Jeremy Carlson Jeremy Carlson
27 апр. 2016 г. 01:40:33

Единственное отличие здесь - это post_type. В остальном вам не нужен массив meta_query для одной пары ключ/значение.

Rutwick Gangurde Rutwick Gangurde
16 нояб. 2016 г. 08:21:55

Конечно, meta query необходим. Только он может быть "встроенным" с meta_key и meta_value или в виде простого массива, который может включать несколько условий.

Maxime Culea Maxime Culea
14 февр. 2020 г. 18:04:38

Принятый ответ десятилетней давности, для более старой версии. Это не делает его неправильным, просто устаревшим для новых версий WP. Я обновил свой ответ, чтобы уточнить это.

Rutwick Gangurde Rutwick Gangurde
9 апр. 2021 г. 14:06:24
0

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

$args = array(
    'post_type' => 'page', // это страница, верно?
    'post_status' => 'publish',   
    'meta_query' => array(
        array(
            'key' => '_wp_page_template',
            'value' => 'page-templates/template-name.php', // папка + имя шаблона, как хранится в БД
        )
    )
);
9 сент. 2019 г. 16:05:48
0

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

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

Смотрите 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

1 окт. 2011 г. 05:07:55
0

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

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

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

5 сент. 2018 г. 02:09:14