is_main_query() — определяет, является ли текущий цикл основным

Условный тег, возвращает true, если цикл, в теле которого выполняется действие является основным циклом страницы, иначе возвращает false.

is_main_query()

Функция не имеет параметров.

Примеры

if( is_main_query() ) {
	// какой-нибудь код
}

pre_get_posts — это хук, позволяющий модифицировать цикл непосредственно перед выводом постов. Действие хука распространяется на абсолютно все циклы вывода, именно поэтому нам и понадобится проверка через is_main_query().

Не стал ничего особо придумывать, решил взять пример из англоязычного кодекса. Суть этого примера в том, что если в основном цикле, находящемся не в админке, не определена рубрика — тогда исключим из него рубрику с ID = 5.

add_action( 'pre_get_posts', 'true_exclude_category' );
 
function true_exclude_category( $query ) {
	if ( !is_admin() // находимся не в админке
	&& $query->is_main_query() // текущий цикл основной
	&& ! $query->get( 'cat' ) ) { // в цикле не выбрана рубрика
		$query->set( 'cat', '-5' );
	}
}

Оставить комментарий / вопрос

phpjsHTMLCSSSQLПросто код
  Для того, чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или авторизуйтесь на сайте.
Получайте новости блога по email или следите за мной в социальных сетях.
  • Миша: Добрый день! В принципе вам только немного нужно доработать код из этого поста - категории уже есть, цена - это и так...

  • eveniy: Добрый день Михаил, подскажите на примере как добавить свои произвольные поля в в вашу форму фильтрации: Я так понимаю...

  • Миша: Отлично! )

  • Дмитрий: сам разобрался: в настройках кастомного типа записи недавно оптимизировал настройки и переоптимизировал: в аргументе 'ta...

  • Дмитрий: У меня по какой-то причине пропало отображение (как в колонке меню слева, так и метабокс в записях ) раздела рубрик для...