Описание функции WP_Query()
Функция WP_Query() позволяет выполнять сложные запросы к базе данных WordPress для получения записей (постов, страниц, пользовательских типов) с учетом различных параметров фильтрации и сортировки.
Она используется в темах и плагинах для вывода пользовательского контента, предоставляя гибкость в формировании запросов к базе данных
Параметры
$args
Тип: array
Обязательный: Нет
По умолчанию: array()
Описание: Массив аргументов для настройки запроса
Возможные значения:
post_type: post, page, custom_post_type
posts_per_page: Количество постов на странице (число)
paged: Номер страницы (число)
orderby: date, title, modified, rand
order: ASC, DESC
meta_query: Массив для фильтрации по мета-данным
tax_query: Массив для фильтрации по таксономиям
Возвращаемое значение
Тип: object
Описание: Объект WP_Query, содержащий результаты запроса
Возможные значения:
• Объект WP_Query, если запрос выполнен успешно
• Пустой объект с нулевым числом постов, если ничего не найдено
Примеры использования
Получение 10 последних записей
$args = array(
'post_type' => 'post',
'posts_per_page' => 10
);
$query = new WP_Query($args);
while($query->have_posts()) : $query->the_post();
echo get_the_title().'
';
endwhile;
wp_reset_postdata();
Выводит заголовки последних 10 постов
Получение пользовательских типов постов, отсортированных по дате
$args = array(
'post_type' => 'custom_post_type',
'orderby' => 'date',
'order' => 'DESC',
'paged' => get_query_var('paged', 1)
);
$query = new WP_Query($args);
Использует пагинацию для навигации
Проверка наличия записей в результате запроса
$query = new WP_Query(array('post_type' => 'post'));
if (!$query->have_posts()) {
echo 'Записей не найдено';
}
Выводит сообщение, если записи не найдены
Вывод последних 5 постов на главной странице
if (is_home()) {
$query = new WP_Query(array('posts_per_page' => 5));
while ($query->have_posts()) : $query->the_post();
get_template_part('template-parts/content', get_post_format());
endwhile;
wp_reset_postdata();
}
Использует шаблон для отображения контента
Фильтрация постов по мета-данным
$args = array(
'post_type' => 'post',
'meta_query' => array(
array(
'key' => 'custom_field',
'value' => 'value_to_match'
)
)
);
$query = new WP_Query($args);
Выводит посты, соответствующие заданному значению мета-данных
Безопасность
Валидация входных данных: Входные параметры проверяются на корректность
Санитизация: Параметры автоматически очищаются WordPress
Рекомендации: При использовании результатов запроса всегда сбрасывайте данные с помощью wp_reset_postdata()
— Связанные функции
Получает массив постов с использованием WP_Query
Модифицирует основной запрос WordPress
— Хуки
Позволяет изменять SQL-запрос перед выполнением
Фильтрует результаты после выполнения запроса
— Примечания
– Ограничения
Не поддерживает все возможные параметры, доступные в SQL
– Частые проблемы
- Неправильные результаты из-за конфликтующих параметров
- Проблемы с пагинацией при неправильной настройке