WordPress-按用户角色获取帖子,将两个查询合并为一个


WordPress - Getting Posts by User Role, combining two queries into one

我正在建立一个网站,其中某些用户将是"高级"用户,而某些用户将不是高级用户。两个角色都可以发布帖子,但在我们的帖子查询中,我们希望"高级"用户发布的所有帖子都先返回,css类为"高级",然后返回所有非高级帖子。

我需要以一种保留分页的方式来这样做。

我有以下查询,可以用来按用户角色返回帖子:

<?php $premiums = get_users( array( 'role' => 's2member_level1, administrator' ) );
$premium_ids = array();
foreach( $premiums as $premium )
$premium_ids[] = $premium->ID;
$posts = new WP_Query( array( 'author' => implode( ',', $premium_ids ), 'post_type' => 'classifieds', 'paged' => get_query_var('paged') ) );
if ( $posts->have_posts() ) : while ( $posts->have_posts() ) : $posts->the_post(); 
// The post title, content, etc, encase in a PREMIUM css class
endwhile; 
endif; 
wp_reset_postdata(); ?>

上面指定的两个角色是我们的"高级"角色,因此他们的所有帖子都应该首先返回。非高级角色使用WordPress中提供的"订阅者"角色。

对于非高级职位,我打算根据需要进行第二次查询,以交换角色,但我意识到这将打破分页,或者至少停止分页以传统方式工作。

因此,很明显,我需要将所有内容都放在一个查询中。

通过阅读以下帖子,我知道可以将两个查询合并为一个,但我不确定这是否是最好的方法。

https://wordpress.org/support/topic/multiple-queries-compiling-into-one-loop

因此,我在这里发布这个问题,看看是否有人知道一种方法,可以查询我们的高级用户,返回他们的帖子,然后查询非高级用户并返回他们的文章,所有这些都在一个单一的查询中,高级帖子上有"高级"类,非高级帖子上则有"非高级"类。

我觉得这更像是一个PHP问题,而不是WordPress问题,所以我把这个问题标记为PHP第一,WordPress第二。

希望有人能帮忙。

感谢

由于似乎没有人对此有任何解决方案,我不得不用jQuery来解决它,这并不理想。

我的解决方案是在每个返回的帖子中查询用户角色,然后将其用作var,为所有"分配一个唯一的类;溢价;职位。然后我使用jQuery将所有高级帖子移到顶部,放入一个空的div中

空div位于循环之前:

<div class="all-premium-posts"></div>

然后在循环中:

        if(have_posts()): while(have_posts()):the_post();
        
        $user_id = $author_id;
        $user = new WP_User( $user_id );
        if ( !empty( $user->roles ) && is_array( $user->roles ) ) {
            foreach ( $user->roles as $role )
                if($role == 's2member_level1') { 
                    $premium_post = 'premium-post';
                }
        }

然后在循环中的每个帖子上:

<div class="post <?php echo $premium_post;?>">

然后是jQuery:

jQuery('.premium-post').prependTo('.all-premium-posts');

这样做的严重缺点是我必须在一个页面上返回所有帖子。

如果返回了数百个帖子,将导致巨大的DB查询和页面加载时间。

不过,它对我们有效,因为我们每30天自动修剪一次帖子,所以每个类别的帖子/每页的帖子对我们来说最多不应该超过20-30个,因此在这种情况下,这是一个可行/可用的解决方案。