Функция is_main_query()
в WordPress позволяет определить, выполняется ли текущий запрос в основном цикле (main query) или это вторичный запрос. Это полезный инструмент для разработчиков, позволяющий адаптировать вывод информации в зависимости от типа запроса, будь то страница, запись или архив. Данная функция часто используется в хук-функциях, чтобы различать основной запрос WordPress и пользовательские запросы.
is_main_query(): bool
Возвращаемое значение: bool
— возвращает true
, если запрос является основным, и false
в противном случае.
Как это работает
Функция is_main_query()
не принимает никаких параметров. Она автоматически сравнивает объект $wp_query
(текущий запрос) с объектом $wp_the_query
(основной запрос). Это простая проверка, которая позволяет разработчикам легко интегрировать условия в код.
Чаще всего is_main_query()
используется в файлах тем и плагинах для модификации поведения страниц на основе текущего запроса.
Пример 1: Выполнение кода только в основном цикле
Если вы хотите выполнить определенный код только в случае, если это основной цикл, можно использовать следующую конструкцию:
if ( is_main_query() ) {
// Код, который нужно выполнить.
echo "Это основной цикл!";
}
Пример 2: Исключение категории из основного цикла
В этом примере мы покажем, как изменить основной цикл, исключив из него категорию с ID 3. Мы будем использовать хук pre_get_posts
, чтобы внести изменения перед выполнением запроса.
add_action( 'pre_get_posts', 'custom_modify_query_exclude_category' );
function custom_modify_query_exclude_category( $query ) {
if ( ! is_admin() && $query->is_main_query() && ! $query->get( 'cat' ) ) {
// Исключаем категорию с ID 3
$query->set( 'cat', '-3' );
}
}
Пример 3: Использование метода WP_Query->is_main_query()
Если вы используете объект запроса в своей функции, вместо вызова is_main_query()
, лучше использовать метод is_main_query()
непосредственно на переданном объекте $query
:
add_action( 'pre_get_posts', 'example_modify_query' );
function example_modify_query( $query ) {
if ( ! is_admin() && $query->is_main_query() ) {
// Изменяем параметры основного запроса
$query->set( 'posts_per_page', 10 ); // Устанавливаем количество постов на странице
}
}
Заключение
Функция is_main_query()
— мощный инструмент для разработчиков WordPress, позволяющий контролировать поведение основного цикла запросов. Использование этой функции поможет вам точно настраивать вывод контента в зависимости от контекста запроса, обеспечивая гибкость и управляемость в разработке тем и плагинов.