В WordPress выборка постов – это одна из ключевых задач, которую решает класс WP_Query. Часто возникает необходимость менять стандартную выборку, чтобы вывести на страницу именно те записи, которые нужны по определённым условиям. В этой статье подробно разберём, как настраивать и изменять выборку постов с помощью параметров WP_Query, а также рассмотрим примеры полезных запросов и советы по оптимизации.
Что такое WP_Query и зачем изменять выборку постов
WP_Query — это класс, который строит SQL-запрос к базе данных WordPress и возвращает набор постов, подходящих под заданные параметры. По умолчанию главная страница сайта выводит последние записи в хронологическом порядке, но часто нужно изменить эту логику — например, показать посты определённой категории, с определённым метаполем или отсортировать по пользовательскому полю.
Изменение выборки позволяет создавать кастомные архивы, блоки рекомендаций, фильтры и другие элементы интерфейса сайта, которые делают контент более релевантным для пользователя.
Вместо того, чтобы менять глобальные запросы через хуки, иногда удобнее создать собственный объект WP_Query и вывести результаты вручную с помощью цикла while.
Основные параметры WP_Query для изменения выборки
Рассмотрим ключевые параметры, которые чаще всего применяются для кастомизации запроса:
- post_type — тип записей (например,
'post','page', или кастомный тип). - category_name — выборка по слагу категории.
- tag — выборка по тегу.
- meta_key и meta_value — фильтрация по метаполю.
- orderby — сортировка (например,
'date','meta_value_num','rand'). - order — направление сортировки (
'ASC'или'DESC'). - posts_per_page — количество постов на странице.
- tax_query — сложный запрос по таксономиям.
- date_query — выборка по датам.
Эти параметры можно комбинировать, чтобы получить очень гибкие выборки.
Пример: выборка постов из категории и с определённым метаполем
Предположим, нужно вывести 5 последних постов из категории novosti, у которых метаполе featured равно yes, отсортированных по дате публикации.
function wpinfo_get_featured_posts() {
$args = [
'post_type' => 'post',
'category_name' => 'novosti',
'meta_key' => 'featured',
'meta_value' => 'yes',
'posts_per_page' => 5,
'orderby' => 'date',
'order' => 'DESC'
];
$query = new WP_Query($args);
if ($query->have_posts()) {
echo '<ul>';
while ($query->have_posts()) {
$query->the_post();
echo '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
}
echo '</ul>';
wp_reset_postdata();
} else {
echo '<p>Посты не найдены.</p>';
}
}Этот код можно вставить в шаблон или шорткод для вывода нужных постов.
Использование tax_query для сложной фильтрации по таксономиям
Иногда нужно сделать выборку по нескольким таксономиям с разными условиями. Для этого используется параметр tax_query, который принимает массив условий.
Например, выбрать посты, которые принадлежат категории novosti и тегу sale одновременно:
$args = [
'post_type' => 'post',
'tax_query' => [
'relation' => 'AND',
[
'taxonomy' => 'category',
'field' => 'slug',
'terms' => 'novosti'
],
[
'taxonomy' => 'post_tag',
'field' => 'slug',
'terms' => 'sale'
]
],
'posts_per_page' => 10
];
$query = new WP_Query($args);Это очень мощный инструмент для создания сложных фильтров на сайте.
Фильтрация по дате с помощью date_query
Если нужно получить посты, опубликованные за определённый период, применяют параметр date_query. Например, вывод постов за последний месяц:
$args = [
'post_type' => 'post',
'date_query' => [
[
'after' => '1 month ago'
]
],
'posts_per_page' => 10
];
$query = new WP_Query($args);Можно также фильтровать по году, месяцу, дате, диапазону и другим параметрам.
Оптимизация запросов WP_Query: на что обратить внимание
При изменении выборки важно учитывать производительность. Сложные запросы могут нагружать базу данных, особенно если на сайте много записей.
Советы по оптимизации:
- Используйте индексы на полях, по которым фильтруете, особенно для метаполей.
- Избегайте запроса с
orderby => 'rand'для больших выборок, это сильно замедляет. - Кешируйте результаты запросов через Transients API или внешние кеши.
- По возможности используйте нативные таксономии для фильтрации, они работают быстрее.
- Ограничивайте количество возвращаемых записей параметром
posts_per_page.
Использование плагина Clearfy Pro для управления запросами
Для упрощения управления выборкой и оптимизации запросов можно использовать плагин Clearfy Pro. Он помогает убирать лишние запросы, оптимизировать базу данных и ускорять работу сайта без глубоких знаний кода.
Вывод
Изменение выборки постов в WordPress через WP_Query — это мощный инструмент, который позволяет создавать гибкие и производительные решения для любых задач. Важно грамотно использовать параметры запроса, оптимизировать их и при необходимости применять кеширование.
Если хотите расширить возможности сайта без написания кода, обратите внимание на решения в каталоге WPSHOP.