Je dois ajuster la boucle principale pour toutes les pages d'archives de la manière suivante. J'ai enregistré une taxonomie personnalisée "myposttypes". Chaque poste est affecté à exactement un terme de "types de types".
S'il s'agit d'une page d'archives de catégories ou de balises, seules les publications avec "myposttypes-> term1" doivent être incluses dans le résultat de la requête.
S'il s'agit d'une page d'archive de taxonomie personnalisée, seules les publications avec "myposttypes-> term2" doivent être incluses dans le résultat de la requête.
J'ai déjà implémenté le hook pre_get_posts
correspondant mais Je ne reçois aucun résultat pour toutes mes pages d'archives. J'ai beaucoup d'articles avec les taxonomies correspondantes dans mon exemple de blog, il devrait donc y avoir des résultats.
Voici mon approche:
function wpmw_adjust_archive_queries( $query ) {
if ( ! is_admin() && is_archive() && $query->is_main_query() ) {
if ( is_category() || is_tag() ) $term_slug = 'term1';
if ( is_tax( 'beitragsarten', 'news' ) ) $term_slug = 'term2';
$taxquery = array(
'tax_query' => array(
array(
'taxonomy' => 'myposttypes',
'field' => 'slug',
'terms' => $term_slug
),
),
);
$query->set( 'tax_query', $taxquery );
}
}
add_action( 'pre_get_posts', 'wpmw_adjust_archive_queries' );
MISE À JOUR: Voici mon approche ajustée et simplifiée, qui ne fonctionne toujours pas, malheureusement. Je reçois un résultat vide. J'ai var_dump'ed $ query et tax_query semble être ajouté correctement à query_vars.
function wpmw_adjust_archive_queries( $query ) {
if ( ! is_admin() && $query->is_archive() && $query->is_main_query() ) {
$tax_query = $query->get( 'tax_query' ) ? : array();
$tax_query[] = array(
'taxonomy' => 'myposttypes',
'field' => 'slug',
'terms' => array( 'term1' ),
'operator' => 'IN'
);
$query->set( 'tax_query', $tax_query );
}
}
add_action( 'pre_get_posts', 'wpmw_adjust_archive_queries' );
Voici la partie correspondante de $ query
[tax_query] => Array
(
[0] => Array
(
[taxonomy] => myposttypes
[field] => slug
[terms] => Array
(
[0] => term1
)
[operator] => IN
)
)
Vous utilisez tax_query
de manière incorrecte. Jetez un oeil sur Page Codex
tax_query
devrait être un tableau pouvant contenir:
relation
- ce devrait être une chaîne (AND/OR)Dans votre code, votre paramètre tax_query
à:
$taxquery = array(
'post_type' => 'post',
'tax_query' => array(
array(
'taxonomy' => 'myposttypes',
'field' => 'slug',
'terms' => $term_slug
),
),
);
Et ça devrait être:
$taxquery = array(
array(
'taxonomy' => 'myposttypes',
'field' => 'slug',
'terms' => $term_slug
),
);
post_type
est un autre paramètre, vous ne pouvez donc pas le définir dans tax_query
.
Mais ... Vous devez quand même faire attention si vous changez tax_query
- il peut déjà avoir une valeur. Donc, si vous voulez être respectueux de cela, vous devriez utiliser quelque chose comme ceci:
$tax_query = $query->get( 'tax_query' );
if ( ! is_array( $tax_query ) ) {
$tax_query = array();
}
$taxquery[] = array(
'taxonomy' => 'myposttypes',
'field' => 'slug',
'terms' => $term_slug
);
$query->set( 'tax_query', $taxquery );
De cette façon, vous ajouterez votre requête de taxe aux requêtes déjà existantes sans les remplacer.