Я фильтрую содержимое с помощью the_content
фильтра. Все работает отлично, за исключением того, что мои изменения применяются и к пользовательским запросам. Мои изменения также отображаются на боковой панели, если виджет использует пользовательский запрос
Чтобы противостоять этому, я использую is_main_query()
только целевой запрос, но он не работает. Изменения просто все еще применяются ко всем запросам. Что забавно, все другие условные проверки работают is_single()
и is_category()
работают, если я нацеливаюсь на определенные страницы, за исключением того, что все изменения влияют на любой другой пользовательский запрос на этой странице, независимо от того, использую я is_main_query()
или нет
Я что-то здесь упускаю? Как применить мои изменения к основному запросу только с помощью the_content
фильтра
add_filter('the_content', 'custom_content');
function custom_content($content){
if(is_main_query()){ // << THIS IS NOT WORKING
// My custom content that I add to the_content()
}
return $content;
}
источник
is_main_query
, действительно думайте, что никто не проверил это полностью. Спасибо за ваш вклад, очень признателенis_main_query
ничего не было.Это всего лишь дополнение к ответу @ Otto. Просто чтобы сделать его немного лучше понятным. В основном то, что говорит @Otto, вы должны изменить логику, что означает: если вы можете надежно определить основной запрос, то вы можете добавить - и удалить - свою зацепку в
the_content
фильтр.Например, основной запрос может быть надежно распознан при
pre_get_posts
действии, поэтому это будет работать:Поскольку вы должны удалить фильтр, когда он больше не нужен, я думаю, что
loop_end
действие должно быть хорошим местом для этого, и в качестве его аналога мы можем использоватьloop_start
. Который будет выглядеть так:источник
Вы используете
is_main_query()
неправильно. Глобальная функция is_main_query () возвращает true, если глобальная переменная $ wp_query не была переопределена.Вероятно, нет 100% надежного способа определить из фильтра the_content, является ли текущий цикл, в котором вы находитесь, основным запросом или нет. Фильтр контента просто фильтрует контент. У него нет никакой возможности узнать, для какого цикла он используется.
Вместо этого вы должны добавить свой фильтр, когда вам это нужно, а затем удалить его, когда вы этого не делаете.
источник
the_content
фильтра