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