Como garantir que is_search () retorne false após query_posts

2

Eu sei que não devo usar query_posts

A coisa é que eu tenho um programa que já faz isso.

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

Agora, o primeiro eco retorna vazio.

O segundo retorna 1

Gostaria de saber se existe alguma variável global que eu possa definir como 0, para que is_search () retorne falso mesmo que eu tenha feito

query_posts("s=kucing");
    
por Sharen Eayrs 31.05.2015 / 14:07

2 respostas

7

Seu grande problema aqui é o uso de query_posts . Ele quebra o objeto de consulta principal e define o objeto de consulta principal como a consulta feita por query_posts . O que você está vendo é bem normal.

Sua solução real aqui com o uso de query_posts seria redefinir a consulta principal de volta para o que deveria ser. É aqui que entra wp_reset_query() . Se esta for uma página normal, is_search() retornará false após wp_reset_query() à medida que a consulta principal é redefinida para a consulta principal da página.

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 )

Lembre-se de que o uso de query_posts é altamente desencorajado. Você deveria estar usando WP_Query

    
por Pieter Goosen 31.05.2015 / 15:18
3

Você pode usar global $wp_query e definir o is_search como falso;

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
    
por sakibmoon 31.05.2015 / 14:22