Как гарантировать, что is_search () возвращает false после query_posts

Я знаю, что я не должен использовать query_posts

Дело в том, что у меня есть программа, которая уже делает это.

query_posts(""); echo "is_search():" . is_search(); query_posts("s=kucing"); echo "is_search after():" . is_search(); 

Теперь первое эхо возвращается пустым.

Второй возвращает 1

Интересно, есть ли какая-то глобальная переменная, которую я могу установить в 0, так что is_search () вернет false, хотя я сделал

 query_posts("s=kucing"); 

Ваша настоящая большая проблема заключается в использовании query_posts . Он разбивает основной объект запроса и устанавливает основной объект запроса в запрос, сделанный query_posts . То, что вы видите, вполне нормально.

Ваше реальное решение здесь с использованием query_posts будет состоять в том, чтобы вернуть основной запрос обратно к тому, каким он должен быть. Здесь находится wp_reset_query() . Если это обычная страница, is_search() вернет false после wp_reset_query() поскольку основной запрос сбрасывается в основной запрос страницы.

 query_posts( '&s=crap' ); // Do your loop as normal wp_reset_query(); // Add this after your loop var_dump( is_search() ); // Will return bool ( false ) 

Помните, что использование query_posts сильно обескуражено. Вы должны использовать WP_Query

Вы можете использовать global $wp_query и установить is_search в false;

 global $wp_query; query_posts(""); //is_search is false now query_posts("s=kucing"); //is_search is set to true $wp_query->is_search = false; //is_search is set to false