Функция is_main_query() в WordPress: использование и примеры

Функция 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. С её помощью можно делать множество полезных вещей, таких как исключение определенных категорий из основного вывода или управление отображением контента на странице.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *