Encontrei esta pergunta:
Existe uma maneira de usar $ query-> set ('tax_query' no filtro pre_get_posts?
o que parece indicar que sim, você pode alterar a consulta de taxonomia nos arquivos de taxonomia via pre_get_posts (). então eu vim com
add_action('pre_get_posts', 'kia_no_child_terms' );
function kia_no_child_terms( $wp_query ) {
if( is_tax() ) {
$wp_query->tax_query->queries[0]['include_children'] = 0;
}
}
assim como
add_action('pre_get_posts', 'kia_no_child_terms' );
function kia_no_child_terms( $wp_query ) {
if( is_tax() ) {
$tax_query = $wp_query->get( 'tax_query' );
$tax_query->queries[0]['include_children'] = 0;
$wp_query->set( 'tax_query', $tax_query );
}
}
para tentar definir o parâmetro include_children como false ... e praticamente todas as combinações das duas que eu consigo pensar. até agora, no entanto, o arquivo de taxonomia ainda mostra os itens no termo filho
e o teste a seguir parece adicionar as consultas fiscais adicionais em vez de substituí-las ... o que me confunde.
function dummy_test( $wp_query){
$tax_query = array(
'relation' => 'OR',
array(
'taxonomy' => 'tax1',
'terms' => array( 'term1', 'term2' ),
'field' => 'slug',
),
array(
'taxonomy' => 'tax2',
'terms' => array( 'term-a', 'term-b' ),
'field' => 'slug',
),
);
$wp_query->set( 'tax_query', $tax_query );
);
add_action('pre_get_posts','dummy_test');
SET não deve substituir o valor atual?
pre-get-posts
advanced-taxonomy-queries
helgatheviking
fonte
fonte
Respostas:
Eu sei que essa é uma pergunta antiga, mas é um pouco confusa e espero que ajude alguém. O motivo de `$ query-> set não funcionar é porque a consulta já foi analisada e agora precisamos também atualizar o objeto tax_query também. Aqui está como eu fiz isso:
fonte
A partir do Wordpress 3.7, uma nova ação chamada
parse_tax_query
foi adicionada exatamente para esse fim.Este gancho modifica os valores de query_vars e tax_query. O uso do
pre_get_posts
método resultou em consultas duplicadas de taxonomia, pelo menos para mim.Antes da versão 3.7, você deve usar a
pre_get_posts
ação, conforme detalhado nas outras respostas.fonte
$wp_query
, usar tags de modelo, ou ambas, ou alguma outra lógica, para determinar se a consulta deve ser modificada em primeiro lugar.Não consegui fazer isso funcionar com nenhuma combinação de
pre_get_posts
ouparse_query
. Eu posso fazer isso de maneira relativamente fácil, apagando o objeto de consulta depois que ele é feito. Não gosto, porque então estou executando a consulta duas vezes, mas estou no limite de tentar ser "eficiente".Então, até que alguém encontre uma resposta melhor, esse é o único método que encontrei até agora.
EDITAR:
Adaptando a resposta de @Tanner Moushey, finalmente consegui fazer esse trabalho excluir todos os termos filhos de um arquivo de taxonomia no
pre_get_posts
gancho sem a ineficiente consulta dupla.fonte
include_children
parâmetro através dopre_get_posts
gancho. Ah bem.Para aqueles que como eu estavam presos a esse problema, encontrei algo útil. Eu usei o sistema prioritário
Minha consulta não foi incluída no resultado e a pesquisa foi interrompida com minhas exclusões. Espero que isso ajude.
fonte