Функция is_main_query() в WordPress
Функция is_main_query() помогает определить, является ли текущий запрос основным запросом на странице. Это важно для того, чтобы правильно управлять выводом контента.
Для подробной информации о функциях тем в WordPress вы можете ознакомиться с разделом о Условных Тегах в документации разработчика тем.
Использование функции
Функция is_main_query() используется следующим образом:
is_main_query();
Возвращаемое значение
Функция возвращает true или false, указывая, является ли запрос основным.
Примеры использования
Пример 1: Выполнение кода только для основного цикла
В этом примере код будет выполняться только если текущий запрос является основным:
if ( is_main_query() ) {
// Здесь размещается код, который нужно выполнить.
}
Пример 2: Исключение категории из основного цикла
В этом примере мы изменим основной цикл так, чтобы исключить посты из категории 5. Это будет происходить только если параметр cat не указан в запросе.
Для этого мы воспользуемся фильтром pre_get_posts:
/**
* Если глобальный запрос относится к категории, исключите категорию 5.
*
* @param WP_Query $query Глобальный экземпляр WP_Query.
*/
add_action( 'pre_get_posts', 'foo_modify_query_exclude_category' );
function foo_modify_query_exclude_category( $query ) {
// Проверяем, является ли запрос основным и не указан ли параметр 'cat'.
if ( $query->is_main_query() && ! $query->get( 'cat' ) ) {
$query->set( 'cat', '-5' ); // Исключаем категорию 5.
}
}
В этом коде используется $query->is_main_query() вместо is_main_query(), так как в некоторых случаях использование первого может быть более корректным.
Примечания
- Глобальный объект
WP_Queryдоступен как$wp_query.
Изменения в функции
Функция is_main_query() была введена в версии 3.3.0 WordPress.
Код функции
Вот код функции is_main_query() для более глубокого понимания:
function is_main_query() {
global $wp_query;
if ( ! isset( $wp_query ) ) {
_doing_it_wrong( __FUNCTION__, __( 'Условные теги не работают до того, как запрос выполнен. До этого они всегда возвращают false.' ), '6.1.0' );
return false;
}
if ( 'pre_get_posts' === current_filter() ) {
_doing_it_wrong(
__FUNCTION__,
sprintf(
__('В %1$s используйте метод %2$s, а не функцию %3$s. См. %4$s.'),
'pre_get_posts',
'WP_Query->is_main_query()',
'is_main_query()',
__('https://developer.wordpress.org/reference/functions/is_main_query/')
),
'3.7.0'
);
}
return $wp_query->is_main_query();
}
Заключение
Функция is_main_query() позволяет разработчикам управлять поведением основной части запроса в WordPress. С её помощью можно делать множество полезных вещей, таких как исключение определенных категорий из основного вывода или управление отображением контента на странице.