関連記事WP_Queryを作成しようとしています。これまでは、タグの配列に一致するすべての投稿をクエリするカスタムWP_Queryを作成しました。
しかし、私は単純なif statement
を作成しようとしています:取得された投稿の数が 10以下 の場合、残りは elsewhere から取得してください(これは特定のカテゴリのものです)。
次のようなループがあります。投稿数を取得するには$related_posts->found_posts
を使用します。
$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();
他の場所から投稿を取得するために残りの部分を使用する方法を知っている人はいますか? (そして同じループ内で可能です)。
次のようなことができます。
$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
最善のアプローチIMOはあなたのクエリで設定されたset posts_per_page
オプションに対してページごとに返された投稿を数えることです。カウントがセットposts_per_page
より少ない場合は、差を計算してからこれを投稿数として使用し、カスタムクエリの残りを埋めます。
まず、あなたの "main"クエリによって返された投稿の数を数えます。この場合、これは$related_posts_args->posts
になります。
count($related_posts_args->posts)
posts_per_page
を10
に設定したので、これはカウントをチェックするための番号になります。
count($related_posts_args->posts) < 10
カウントが10未満の場合は、10とカウントの差を取る必要があります。この違いは、カスタムクエリのposts_per_page
オプションになります。
$ppp = 10 - count($related_posts_args->posts);
これで、カスタムクエリを実行して投稿を取得し、空白スペースを埋めることができます。あなただけの独自のクエリ引数を追加する必要があります
これが完全なコードです。
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();
}
}
コードを統合して
$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();
}
}
}