Создание динамических веб-сайтов WordPress во многом зависит от вашей способности извлекать определенный контент. Это руководство посвящено запросам записей — методу извлечения и отображения целевых записей на основе ваших критериев. Мы рассмотрим два метода: WP_Query или get_posts(), а также их функции и практические примеры.
- Выбор метода запроса WP_Query или get_posts()
- Глобальный запрос? Не беспокойтесь!
- get_posts() — Простота и скорость
- WP_Query — Гибкость и контроль
- Аргументы запросов в WordPress (WP_Query)
- Заключение. WP_Query или get_posts?
Выбор метода запроса WP_Query или get_posts()
WordPress предлагает два способа запросить записи: get_posts() и WP_Query. Оба метода эффективны, но выбор зависит от ваших предпочтений и незначительных нюансов производительности.
get_posts()возвращает массив записей.WP_Queryсоздает объект запроса, который предоставляет больше гибкости в работе с результатами.
Важно отметить, что использование get_posts() может повлиять на глобальный цикл запросов WordPress, если не позаботиться о его правильной очистке.
Настоящее волшебство заключается в аргументах, которые вы предоставляете get_posts() или WP_Query. Эти аргументы определяют параметры выборки записей. Давайте углубимся в некоторые часто используемые аргументы:
post_type: Укажите тип записей, которые вы хотите получить, например, «post» (запись), «page» (страница) или пользовательские типы записей.posts_per_page: Определите количество записей, отображаемых на странице. Используйте-1для получения всех записей.category__in: Выберите записи, принадлежащие определенным категориям (список идентификаторов категорий, разделенных запятыми).post__not_in: Исключите записи с определенными идентификаторами из результатов (массив идентификаторов записей).orderby: Сортируйте записи по различным критериям, таким как «date» (дата), «title» (заголовок) или пользовательские поля.meta_query: Выборка записей на основе пользовательских метаданных для расширенной фильтрации.
Для большинства случаев, когда нужна выборка записей по простым критериям, get_posts() — отличный выбор. Но если вам нужна пагинация, фильтрация или более сложная работа с результатами, WP_Query предоставит необходимую гибкость.
Глобальный запрос? Не беспокойтесь!
В каждой странице WordPress по умолчанию выполняется один глобальный запрос. Например, при посещении пользователем архива категории, WordPress автоматически выполняет запрос для отображения соответствующих записей. Темы обычно используют цикл (the loop) для доступа к записям из этого запроса.
Создание нового запроса с собственным циклом внутри глобального цикла требует осторожности, чтобы избежать конфликтов. Однако, если ваша цель — изменить существующий глобальный запрос WordPress, это совсем другая история, которую мы рассмотрим в отдельной статье.
get_posts() — Простота и скорость
get_posts() — это удобный способ получить массив записей по вашим критериям. Он подходит для ситуаций, когда не требуется сложная фильтрация или пагинация.
Преимущества:
- Простота: Легко использовать и внедрять в код темы.
- Скорость: Работает быстрее
WP_Query, особенно при большом количестве записей.
Недостатки:
- Ограниченная гибкость: Не подходит для сложных запросов с пагинацией или фильтрацией по мета-полям.
$custom_query = get_posts(array(
// Ваши аргументы выборки
));
foreach ($custom_query as $custom_post) {
// Доступ к свойствам текущей записи (нельзя использовать шаблонные функции типа the_title() и тд..)
}
Если необходимо использовать шаблонные функции, тогда можно использовать следующий код:
$custom_query = get_posts(array(
// Ваши аргументы выборки
));
foreach ($custom_query as $post) {
setup_postdata($post);
// теперь функции будут работать
the_title();
}
wp_reset_postdata();
Вспомогательные функции
setup_postdata($post)– Устанавливает глобальный объект записи для использования шаблонных функций внутри циклаforeach.wp_reset_postdata()– Сбрасывает глобальный объект записи после цикла.
WP_Query — Гибкость и контроль
WP_Query создает объект запроса, предоставляющий полный контроль над результатами.
Преимущества:
- Гибкость: Позволяет строить сложные запросы с фильтрацией по различным параметрам (категории, теги, мета-поля) и реализовать пагинацию.
- Управление результатами: Предоставляет больше возможностей для работы с полученными записями.
Недостатки:
- Сложность: Требует более глубокого понимания структуры запросов WordPress.
- Производительность: Может работать чуть медленнее
get_posts()при большом количестве записей.
$custom_query = new WP_Query(array(
// Ваши аргументы выборки
));
if ($custom_query->have_posts()) {
while ($custom_query->have_posts()) : $custom_query->the_post();
// Доступ к свойствам текущей записи
the_title();
endwhile;
wp_reset_postdata();
}
Эксклюзивные курсы на Udemy — это твой ключ к востребованным навыкам и успешной карьере. Я вложил всю душу в их создание, чтобы ты получил знания высочайшего качества по доступной цене.
Аргументы запросов в WordPress (WP_Query)
Для управления выборкой записей в WordPress класс WP_Query предоставляет множество параметров (аргументов). Полный список аргументов можно найти в документации WP_Query.
Примеры аргументов:
- Поиск по таксономии (категориям, тегам и т.д.)
- Фильтрация по мета-данным записей (дополнительным полям)
- Выбор по типу записей (страницы, посты, товары и т.д.)
- Включение или исключение определенных записей
- Сортировка результатов по различным критериям
Рассмотрим несколько распространенных примеров использования аргументов для выборки записей.
Пример 1: Связанные записи из той же категории
Допустим, вы хотите отобразить блок «Похожие записи» в конце каждой статьи. Он должен показывать случайный выбор из 3-х записей той же категории, что и текущая статья, исключая саму текущую запись.
$post_id = get_the_ID(); // ID текущей записи
$custom_query = new WP_Query([
'post_type' => 'post',
'posts_per_page' => 3,
'category__in' => wp_get_post_categories($post_id),
'post__not_in' => [$post_id],
'orderby' => 'rand'
]);
Разберем аргументы:
post_type— указывает тип записей, которые нужно выбрать («post» — обычные записи).posts_per_page— определяет количество записей на странице (3).category__in— фильтрует записи по категориям. Мы используемwp_get_post_categoriesдля получения массива идентификаторов категорий текущей записи.post__not_in— исключает конкретные записи по ID (текущая запись).orderby— задает порядок сортировки результатов («rand» — случайный порядок). Документация по возможным вариантам сортировки — здесь: URL orderby query post wordpress.
Пример 2: Все записи кастомного типа с несколькими критериями сортировки
Предположим, у вас есть кастомный тип записей «book» (книги), и на странице шаблона вы хотите отобразить все опубликованные книги. Сортировка должна быть выполнена сначала по «menu_order» (порядку в меню, который можно задать для каждой книги), а затем по названию.
$custom_query = new WP_Query([
'post_type' => 'book',
'posts_per_page' => -1,
'orderby' => ['menu_order' => 'ASC', 'title' => 'DESC']
]);
Разберем аргументы:
post_type— указывает тип записей («book»).posts_per_page— значение «-1» означает выбор всех записей (опубликованных, если не указано иначе в аргументеpost_status).orderby— массив для указания критериев сортировки. Сначала сортировка по «menu_order» по возрастанию (ASC), затем по названию (title) по убыванию (DESC).
Пример 3: Записи с определенными мета-данными
Допустим, у вас есть кастомный тип записей «book» (книги), и вы хотите выбрать все книги, которые либо не опубликованы, либо опубликованы между 2000 и 2022 годом. Год храниться как отдельное мета поле для поста.
$custom_query = new WP_Query([
'post_type' => 'book',
'posts_per_page' => -1,
'meta_query' => [
'relation' => 'OR',
[
'key' => 'book_status',
'value' => 'unpublished',
'compare' => '='
],
[
'key' => 'year_published',
'value' => [2000, 2022],
'type' => 'numeric',
'compare' => 'BETWEEN'
]
]
]);
Разберем аргументы:
meta_query— массив для определения условий по мета-данным записей.relation— указывает отношение между условиями («OR» — ИЛИ, «AND» — И).- Вложенные массивы внутри
meta_queryописывают отдельные условия:key— ключ мета-данных (например, «book_status» или «year_published»).value— значение мета-данных, с которым нужно сравнить.compare— оператор сравнения (например, «=», «!=», «<«, «>», «BETWEEN»).type— тип данных мета-данных (по умолчанию строковый, для числовых значений — «numeric»).
Заключение. WP_Query или get_posts?
В этой статье мы подробно рассмотрели два основных метода запросов записей в WordPress. Узнали как строиться запрос и цикл и в каких случаях какой подход лучше использовать:
get_posts() — простой и быстрый метод, который подходит для простых запросов без сложной фильтрации или пагинации. Он возвращает массив записей.
WP_Query — более гибкий и мощный метод, который позволяет создавать сложные запросы с фильтрацией по различным параметрам и реализовать пагинацию. WP_Query возвращает объект запроса, предоставляющий полный контроль над результатами.








