私は人々のグループ(従業員)のためのカスタム投稿タイプを持っています。最初は、7人のランダムな従業員を表示する必要がありました。それは簡単でした
<?php
$args = array(
'post_type' => 'employees',
'orderby' => 'Rand',
'posts_per_page' => 7,
);
$query = new WP_Query($args);
while ( $query->have_posts() ) { $query->the_post();
//do stuff
<?php endif;
} wp_reset_postdata();
?>
しかし今、私は7人のうちの少なくとも1人が常に女性であることを確認するように頼まれました。会社の男女比は4対1です。
テストできるチェックボックスを設定しました。
<?php if( in_array( 'yes', get_field('is_female') ) ){
// this is a female
}
私はそれをすべてまとめる手助けが必要です。表示されている記事のいずれかが女性である場合は、追跡する必要があると思います。女性がリストに載っていない場合は、7番目の位置に到達したら、それが見つかるまで繰り返し続ける必要があります。
助言がありますか?
ここでの最良の方法は、ここで3つの別々のループを実行することです( 2つのループを実行することもできますが、男性と女性のクエリで完全な投稿を取得し、それらを組み合わせてシャッフルする必要があります )。最初の2つは5人の男性を取得するために使用され、2番目のループは2人の女性を取得します。必要に応じて調整できます。 3番目のループは最初の2つのループからの情報を使用して完全な投稿を取得します。
ここでは、男性用と女性用の2つの別々の値を持つカスタムフィールドを使用していることに同意します。また、私はあなたがこのクエリをページ分割する必要がないことを認めます。
あなたはこのようなことを試すことができます
/*
* First query to get 5 men. Only get post ID's to increase performance
*/
$args1 = array(
'posts_per_page' => 5,
'orderby' => 'Rand',
'suppress_filters' => true,
'no_found_rows' => true,
'fields' => 'ids',
'meta_query' => array(
array(
'key' => 'custom-field-name',
'value' => 'value-for-men',
)
)
);
$men = new WP_Query( $args1 );
/*
* Second query to get 2 women. Only get post ID's to increase performance
*/
$args2 = array(
'posts_per_page' => 2,
'orderby' => 'Rand',
'suppress_filters' => true,
'no_found_rows' => true,
'fields' => 'ids',
'meta_query' => array(
array(
'key' => 'custom-field-name',
'value' => 'value-for-women',
)
)
);
$women = new WP_Query( $args2 );
/*
* Merge the post id's from the two queries
*/
$merged_ids = array_merge( $women->posts, $men->posts );
/*
* Use the merged array of post id's to get the complete posts. Use 'orderby' => 'post__in'
* to keep shuffled order of the posts that will be returned
*/
$args3 = array(
'post__in' => shuffle( $merged_ids ),
'orderby' => 'post__in'
);
$merged_queries = new WP_Query( $args3 );
?><pre><?php var_dump($merged_queries->posts); ?></pre><?php
私はいくつか調整を加えました。 2つの配列を作成したら、このように組み合わせました
$merged_queries->posts = array_merge( $women->posts, $men->posts );
shuffle($merged_queries->posts);
$merged_queries->post_count = $women->post_count + $men->post_count;
while ( $merged_queries->have_posts() ) { $merged_queries->the_post();
// do stuff
それは少し遅いように思われるので、私はいくらかの冗長性または非効率性があるかもしれません、しかしそれは私が望んだ結果を私に与えています。