Ich arbeite an einer Produktseite, auf der ich Bewertungen von meinem Beitragstyp 'Bewertungen' zeige, wenn der Titel der Produktseite mit meinem Begriff aus der Taxonomie 'Bewertungsprodukt' übereinstimmt.
Beispiel.
Titel der Produktseite: Kühlschrank
Zeige (Rezensionen) Beiträge mit:
Das funktioniert einwandfrei. Aber manchmal habe ich keine Bewertungen für ein Produkt (da es keine Übereinstimmung zwischen Produkttitel und Begriff gibt) und dann möchte ich "Allgemeine" Bewertungen anzeigen. In meiner Website sind dies Beiträge mit:
Diese Posts haben keinen Begriff aus der Taxonomie 'Review-Produkt'.
Meine Frage:
Wie kann ich Bewertungsbeiträge ohne einen Begriff anzeigen, wenn es keine Bewertungsbeiträge gibt, die dem Produkttitel entsprechen?.
Das ist, was ich jetzt habe:
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();
}
Sie können dasselbe Objekt von WP_Query
nicht zweimal verwenden. Daher müssen Sie einen anderen mit einem tax_query
-Parameter erstellen, um Beiträge abzurufen, die keinem Begriff zugeordnet sind.
//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 );
Die Idee ist, eine Liste aller Begriffe Ihrer Taxonomie abzurufen und diese als Argument an Ihre Steuerabfrage mit dem Operator NOT IN
zu übergeben.
Die zweite Schleife in Ihrem Beispiel sollte über das neue WP_Query
-Objekt gehen.
$posts_query = new WP_Query( array(
'tax_query' => array(
array(
'taxonomy' => 'foo',
'operator' => 'NOT EXISTS', // or 'EXISTS'
),
),
) );