wake-up-neo.com

Beiträge ohne Begriff anzeigen

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:

  • Beitragstyp: 'Bewertungen'
  • Taxonomie: 'Review-Produkt'
  • Begriff: Kühlschrank

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:

  • Beitragstyp: 'Bewertungen'
  • Taxonomie: 'Review-Produkt'
  • Laufzeit: keine Laufzeit (!!!)

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();
}
7
Robbert

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.

7
David
$posts_query = new WP_Query( array(
    'tax_query' => array(
        array(
            'taxonomy' => 'foo',
            'operator' => 'NOT EXISTS', // or 'EXISTS'
        ),
    ),
) );

siehe: https://core.trac.wordpress.org/ticket/29181

3
geminorum