显示几个随机的帖子,但确保满足条件

时间:2015-03-22 作者:Christina

我为一群人(员工)定制了一个职位类型。首先,我需要随机显示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(); 

?>
但现在我被要求确保七个人中至少有一个永远是女人。这家公司的男女比例是4比1。

我设置了一个复选框,可以对其进行测试:

<?php if( in_array( \'yes\', get_field(\'is_female\') ) ){
 // this is a female
}
我需要帮助把这一切放在一起。我想我需要跟踪显示的帖子是否是女性。一旦我到达第七位,如果一个女性没有被列入名单,我需要不断迭代,直到找到一个。

有什么建议吗?

2 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

我认为这里最好的方法是在这里运行三个单独的循环(你也可以做两个循环,但是你需要在男性和女性查询中获得完整的帖子,将它们合并并重新排列),前两个循环将用于获得5个男性,第二个循环将获得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    

SO网友:Christina

我做了一些调整。一旦我创建了两个数组,我就这样组合了它们

$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
这似乎有点慢,所以我可能有一些冗余或效率低下,但它给了我我所希望的结果。

结束

相关推荐

Secondary loop doesn't work

嗨,我的模板页面中的二次循环有问题。php。我试图显示一些证明,检索这些证明的代码在我的索引中工作得非常好。php,但如果我从模板页面调用,我不会检索任何推荐信息。这里是我的代码:幻灯片。php<div class=\"jumbotron bg-black\"> <div class=\"row\"> <div class=\"container experience\"> <hr> <