J'ai trouvé cette question:
Il existe un moyen d'utiliser $ query-> set ('tax_query' dans le filtre pre_get_posts?
ce qui semble indiquer que oui, vous pouvez modifier la requête de taxonomie sur les archives de taxonomie via pre_get_posts (). donc je suis venu avec
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;
}
}
aussi bien que
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 );
}
}
pour essayer de définir le paramètre include_children sur false ... et à peu près toutes les combinaisons des deux auxquelles je peux penser. jusqu'à présent cependant, les archives de taxonomie montrent toujours les éléments du terme enfant
et le test suivant semble simplement AJOUTER les requêtes fiscales supplémentaires au lieu de les écraser ... ce qui me confond.
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 ne devrait-il pas écraser la valeur actuelle?
pre-get-posts
advanced-taxonomy-queries
helgatheviking
la source
la source
Réponses:
Je sais que c'est une vieille question, mais c'est un peu déroutant et j'espère que cela aidera quelqu'un. La raison pour laquelle `$ query-> set ne fonctionne pas est parce que la requête a déjà été analysée et que nous devons également mettre à jour également l'objet tax_query. Voici comment je l'ai fait:
la source
Depuis Wordpress 3.7, une nouvelle action nommée a
parse_tax_query
été ajoutée exactement à cet effet.Ce hook modifie les valeurs de query_vars et tax_query. L'utilisation de la
pre_get_posts
méthode a entraîné des requêtes de taxonomie en double, du moins pour moi.Avant la version 3.7, vous devez utiliser l'
pre_get_posts
action à la place, comme indiqué dans les autres réponses.la source
$wp_query
, utiliseriez des balises de modèle, ou les deux, ou une autre logique, pour déterminer si la requête devait être modifiée en premier lieu.Je ne pouvais pas faire fonctionner cela avec une combinaison de
pre_get_posts
ouparse_query
. Je peux le faire relativement facilement en effaçant l'objet de requête une fois qu'il a été créé. Je n'aime pas ça parce que j'exécute la requête deux fois, mais je suis à bout d'essayer d'être "efficace".Donc, jusqu'à ce que quelqu'un vienne avec une meilleure réponse, c'est la seule méthode que j'ai trouvée jusqu'à présent.
ÉDITER:
En adaptant la réponse de @Tanner Moushey, j'ai finalement pu faire ce travail pour exclure tous les termes enfants d'une archive de taxonomie sur le
pre_get_posts
crochet sans la double requête inefficace.la source
include_children
paramètre via lepre_get_posts
crochet. Et bien.Pour ceux qui comme moi étaient coincés avec ce problème, j'ai trouvé quelque chose d'utile. J'ai utilisé le système de priorité
Ma requête n'a pas été incluse dans le résultat et la recherche a été interrompue avec mes exclusions. J'espère que cela vous aidera.
la source