Я работаю над сайтом с функцией поиска, которая позволяет пользователям выполнять поиск по многим мета-постам. Существует конкретный шаблон поиска, для которого я не хотел бы принудительно возвращать результаты. Технически WP_Query найдет результаты в базе данных, но я бы хотел как-то переопределить это, чтобы заставить его не возвращать никаких результатов, чтобы вызвать if( $example->have_posts() )
сбой.
Есть ли какой-то параметр, который я могу передать WP_Query 'force_no_results' => true
, который заставит его ничего не возвращать?
WP_Query()
возврата результатов не может или не может быть лучшим способом ответить на этот вопрос. Также было бы полезно, если бы вы описали шаблон поиска, который вы хотите сделать незапрашиваемым. Знание шаблона поиска может помочь найти решение.Ответы:
Пытаться
Просто и по существу.
источник
post__in
возвращал сообщения, когда передавал пустой массив ...array(0)
прекрасно работает! Это странно, но на самом деле это может быть связано с проблемой, которая возникла в ядре WP как ошибка, но затем была оставлена как есть, потому что слишком много разработчиков тем / плагинов создавали функциональность вокруг нее -_- core.trac.wordpress.org/ билет / 28099Любопытно, что нет чистого / явного способа короткого замыкания
WP_Query
.Если это основной запрос, вы можете что-то обойти
WP->parse_request()
, там, кажется, есть относительно недавний (3.5)do_parse_request
фильтр.Но для
WP_Query
себя обычно нужны грязные хаки, такие как короткое замыкание SQL-запроса путем добавленияAND 1=0
черезposts_where
фильтр и т. Д.источник
"post_type" => "break_loop"
, несуществующий тип почты.Проблемы с установкой для параметра запроса несуществующего значения: 2:
'posts_*'
хуков фильтров ('posts_where'
,'post_join'
и т. Д.), Которые действуют на запрос, поэтому вы никогда не можете быть уверены, что даже если задать несуществующий параметр, запрос не даст результатов, простоеOR
предложение, возвращаемое фильтром, возвращает что-то.Вам нужно немного жесткой подпрограммы, чтобы убедиться, что запрос не даст результата, и нет проблем с производительностью (или очень незначительных).
Чтобы запустить эту подпрограмму, вы можете использовать каждый метод, технически вы можете передать любой аргумент
WP_Query
, аргументы события, которые не существуют.Так что если вам нравится что-то вроде
'force_no_results' => true
, вы можете использовать это так:и добавьте обратный вызов
'pre_get_posts'
, выполняющий тяжелую работу:Этот код запускается
'pre_get_posts'
как можно позже. Если в запросе присутствует аргумент force_no_results, то:SELECT ID FROM wp_posts WHERE 0 = 1
после того, как все фильтры удалены, нет возможности изменить этот запрос, и он очень быстрый и не дает никакого результата наверняка.источник