Encontré esta pregunta:
¿Hay una manera de usar $ query-> set ('tax_query' en el filtro pre_get_posts?
lo que parece indicar que sí, puede modificar la consulta de taxonomía en los archivos de taxonomía a través de pre_get_posts (). entonces se me ocurrió
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;
}
}
tanto 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 tratar de establecer el parámetro include_children en falso ... y casi todas las combinaciones de las dos que se me ocurren. hasta ahora, sin embargo, el archivo de taxonomía todavía muestra los elementos en el término secundario
y la siguiente prueba simplemente parece AGREGAR las consultas fiscales adicionales en lugar de sobrescribirlas ... lo 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');
¿No debería SET sobrescribir el valor actual?
pre-get-posts
advanced-taxonomy-queries
helgatheviking
fuente
fuente
Respuestas:
Sé que esta es una vieja pregunta, pero es un poco confusa y espero que ayude a alguien. La razón por la que `$ query-> set no funciona es porque la consulta ya se ha analizado y ahora también necesitamos actualizar el objeto tax_query. Así es como lo hice:
fuente
A partir de Wordpress 3.7,
parse_tax_query
se agregó una nueva acción denominada exactamente para este propósito.Este enlace modifica los valores de query_vars y tax_query. El uso del
pre_get_posts
método resultó en consultas de taxonomía duplicadas, al menos para mí.Antes de 3.7 debes usar la
pre_get_posts
acción, como se detalla en las otras respuestas.fuente
$wp_query
, usaría etiquetas de plantilla, o ambas, o alguna otra lógica, para determinar si la consulta debe modificarse en primer lugar.No pude lograr que esto funcione con ninguna combinación de
pre_get_posts
oparse_query
. Puedo hacerlo relativamente fácilmente borrando el objeto de consulta después de que se haya realizado. No me gusta porque entonces estoy ejecutando la consulta dos veces, pero estoy al final de mi ingenio tratando de ser "eficiente".Entonces, hasta que alguien llegue con una mejor respuesta, este es el único método que he encontrado hasta ahora.
EDITAR:
Adaptando la respuesta de @Tanner Moushey, finalmente pude hacer que esto funcione para excluir todos los términos secundarios de un archivo de taxonomía en el
pre_get_posts
gancho sin la ineficiente doble consulta.fuente
include_children
parámetro a través delpre_get_posts
gancho. Ah bueno.Para aquellos a quienes les agrado este problema, encontré algo útil. Utilicé el sistema de prioridad
Mi consulta no se incluyó en el resultado y la búsqueda se interrumpió con mis exclusiones. Espero que esto ayude.
fuente