Suporte » Questões avançadas » Detectar se é uma instancia nova do WP_Query

  • Num projecto que estou a desenvolver precisei de usar filtros para as queries, nomeadamente, posts_fields, posts_where e posts_groupby.

    O problema é que as alterações eram também aplicadas a novas instâncias do WP_query, usadas no tema ou em plugins. Depois de alguma ginástica encontrei uma solução que aparentemente serve.

    function is_custom_query(){
    	$is_custom_query = true;
    	foreach(debug_backtrace() as $caller){
    		if(!empty($caller['class']) && $caller['class']=='WP'){
    			$is_custom_query = false;
    			break;
    		}
    	}
    	return $is_custom_query;
    }

    Partilho aqui a solução. Se descobrirem algum caso em que não funcione partilhem.

A visualizar 2 respostas - de 1 a 2 (de um total de 2)
  • Uma pergunta, querias saber se um dado objecto é instancia de um WP_Query…

    Um exemplo:

    function isWPQuery($object)
    {
    	return ($object instanceof WP_Query);
    }//end isWPQuery

    Não funciona?

    PS: não entendi bem o que querias, mas se for pelo titulo, acho esta forma mais lógica e menos pesada :\

    Thread Starter relvao

    (@relvao)

    São todas instância do WP_Query. Eu pretendo é que os filtros só sejam aplicados à instância do WP_query criada pelo core do WP e não pelos plugins ou outras queries definidas directamente no tema.

    Para ser mais concreto. Em (quase) todas as páginas apresentadas estou a efectuar um group_by post_author. Ao definir o filtro este fica aplicado a qualquer instância do WP_Query, incluindo os casos onde não queria, como por exemplo uma lista com as últimas notícias publicadas que aparecem numa sidebar. Como ambas as instâncias ocorrem no mesmo url não podemos usar as tags is_page(), is_category(), etc..

    Verificando o debug_backtrace() podemos ter uma ideia do contexto onde cada uma das instâncias foi criada.

A visualizar 2 respostas - de 1 a 2 (de um total de 2)
  • O tópico ‘Detectar se é uma instancia nova do WP_Query’ está fechado a novas respostas.