webentwicklung-frage-antwort-db.com.de

Erhalte 10 Beiträge von einer WP_Query. Bei weniger als 10 erhalten Sie den Rest von woanders

Ich versuche, verwandte Beiträge WP_Query zu erstellen. Bisher habe ich eine benutzerdefinierte WP_Query erstellt, die alle Posts abfragt, die mit einem Array von Tags übereinstimmen.

Ich versuche jedoch, einen einfachen if statement zu erstellen: Wenn die Anzahl der abgerufenen Beiträge weniger als 10 beträgt, holen Sie sich den Rest von woanders (dies könnte aus einer bestimmten Kategorie stammen).

Ich habe die folgende Schleife. Es benutzt $related_posts->found_posts um die Anzahl der Beiträge zu erhalten.

$related_posts_args =
    array(
    'tag__and' => $list_of_tags, // array of tag IDS
    'posts_per_page' => 10,
    'post__not_in' => $already_posted, // array of post IDs
    'post_type' => 'post',
    'post_status' => 'publish',
    'orderby' => 'date',
    'order' => 'DESC',
    'orderby' => 'Rand',
);

$related_posts_query = new WP_Query( $related_posts_args );
if ( $related_posts_query->have_posts() ):
    while ( $related_posts_query->have_posts() ):
        $related_posts_query->the_post();
// this is the number of posts in my current query
    echo $related_posts_query->found_posts; 
            the_title();
    endwhile;
endif;
wp_reset_postdata();

Würde jemand wissen, wie man den Rest benutzt, um Beiträge von woanders zu erhalten? (Und ist innerhalb der gleichen Schleife möglich).

6
tmyie

Sie könnten etwas tun wie:

$related_posts_query = new WP_Query( $related_posts_args );
if( $related_posts_query->found_posts < 10 ){
   $args = array(/* new wp_query args*/);
   $newquery = new WP_Query( $args );
}

# merge the two results
$related_posts_query->posts = array_merge( $related_posts_query->posts, $newquery->posts );
$related_posts_query->post_count = count( $related_posts_query->posts );

# do your loop here
7
RRikesh

Der beste Ansatz für IMO ist es, die pro Seite zurückgegebenen Posts mit der in Ihrer Abfrage festgelegten Option posts_per_page zu vergleichen. Wenn die Anzahl kleiner als der festgelegte posts_per_page ist, berechnen Sie die Differenz und verwenden Sie diese als Anzahl der Beiträge, um den Rest in einer benutzerdefinierten Abfrage auszufüllen

So sollte es funktionieren:

Zählen Sie zunächst die Anzahl der von Ihrer "Haupt" -Abfrage zurückgegebenen Posts. In diesem Fall ist dies $related_posts_args->posts.

count($related_posts_args->posts)

Da Sie Ihren posts_per_page auf 10 gesetzt haben, ist dies die Nummer, anhand derer die Zählung überprüft wird.

count($related_posts_args->posts) < 10

Wenn die Anzahl kleiner als 10 ist, müssen Sie die Differenz zwischen 10 und der Anzahl ermitteln. Dieser Unterschied ist die Option posts_per_page für Ihre benutzerdefinierte Abfrage

$ppp = 10 - count($related_posts_args->posts);

Sie können jetzt Ihre benutzerdefinierte Abfrage ausführen, um die Posts abzurufen, die die leeren Stellen ausfüllen. Sie müssen nur Ihre eigenen Abfrageargumente hinzufügen

Hier ist der vollständige Code

if( count($related_posts_args->posts) < 10 ) { 

    $ppp = 10 - count($related_posts_args->posts);

    $args = [ //Add your own query arguments to suite your needs
        'orderby' => 'Rand',
        'posts_per_page' => $ppp
    ];

    $q = new WP_Query( $args );

    if( $q->have_posts() ) {
        while( $q->have_posts() ) {
            $q->the_post();

            //Display your loop elements

        }
        wp_reset_postdata();
    }
}

Mit Ihrem Code integriert

$related_posts_args = [
    'tag__and' => $list_of_tags, // array of tag IDS
    'posts_per_page' => 10,
    'post__not_in' => $already_posted, // array of post IDs
    'post_type' => 'post',
    'post_status' => 'publish',
    'orderby' => 'date',
    'order' => 'DESC',
    'orderby' => 'Rand',
];

$related_posts_query = new WP_Query( $related_posts_args );
if ( $related_posts_query->have_posts() ) {
    while ( $related_posts_query->have_posts() ) {
        $related_posts_query->the_post();

        //Display your loop elements

    }
    wp_reset_postdata();

    if( count($related_posts_args->posts) < 10 ) { 

        $ppp = 10 - count($related_posts_args->posts);

        $args = [ //Add your own query arguments to suite your needs
            'orderby' => 'Rand',
            'posts_per_page' => $ppp
        ];

        $q = new WP_Query( $args );

        if( $q->have_posts() ) {
            while( $q->have_posts() ) {
                $q->the_post();

                //Display your loop elements

            }
            wp_reset_postdata();
        }
    }
}
0
Pieter Goosen