Je travaille sur une page de produit sur laquelle je montre des critiques de mon type de publication "critiques", si le titre de la page du produit correspond à mon terme de la taxonomie "produit de révision".
Exemple.
Titre de la page du produit: Refrigerator
Afficher les (commentaires) messages avec:
Cela fonctionne totalement bien. Mais parfois, je n'ai pas d'avis sur un produit (car il n'y a pas de correspondance entre le titre et le terme du produit), puis je souhaite afficher les avis "Général". Sur mon site, ce sont des posts avec:
Ces publications n'ont pas de terme de la taxonomie 'review-product'.
Ma question:
Comment puis-je afficher les commentaires sans terme, s'il n'y a pas de commentaire correspondant au titre du produit?.
C'est ce que j'ai maintenant:
function gtp_show_reviews( $number = 100, $term = null ) {
$reviews = new WP_Query( array(
'post_type' => 'reviews',
'review-product' => $term, // Fill this with product page slug (refrigerator)
));
if( $reviews->have_posts() ) {
while( $reviews->have_posts() ) {
$reviews->the_post();
// The review
}
}
else {
// Here I try to unset the 'review-product' term
unset($reviews->query_vars['review-product']);
unset($reviews->query_vars['term']);
while( $reviews->have_posts() ) {
$reviews->the_post();
// Check if review has no term
if( $reviews->has_term() == false ) {
// The review
}
}
}
wp_reset_postdata();
}
Vous ne pouvez pas utiliser le même objet de WP_Query
deux fois. Par conséquent, vous devez en créer un autre avec un paramètre tax_query
pour récupérer les publications qui ne sont affectées à aucun terme.
//fetch all reviews which have no assigned term in 'review-product'
$taxonomy = 'review-product';
$post_type = 'reviews';
$args = [
'post_type' => $post_type,
'tax_query' => [
[
'taxonomy' => $taxonomy,
'terms' => get_terms( $taxonomy, [ 'fields' => 'ids' ] ),
'operator' => 'NOT IN'
]
]
];
$query = new \WP_Query( $args );
L'idée est de récupérer une liste de tous les termes de votre taxonomie et de les transmettre en tant qu'argument à votre requête de taxe avec l'opérateur NOT IN
.
La deuxième boucle de votre exemple doit parcourir le nouvel objet WP_Query
.
$posts_query = new WP_Query( array(
'tax_query' => array(
array(
'taxonomy' => 'foo',
'operator' => 'NOT EXISTS', // or 'EXISTS'
),
),
) );