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

时间:2016-01-10 21:51:38

标签: php mysql wordpress pagination

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

我需要以保持分页的方式这样做。

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

done

上面指定的两个角色是我们的" premium"角色,所以他们的所有帖子应该先退回。非高级角色使用"订户" WordPress中提供的角色。

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

因此,似乎很明显我需要在一个查询中包含所有内容。

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

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

因此,我在此处发布问题,以查看是否有人可能知道查询我们的高级用户,返回他们的帖子,然后查询非高级用户并返回他们的帖子的方法,所有这些都在一个查询中使用&# 34;溢价"高级职位课程和非高级职位课程#34;关于非高级课程的课程。

这更像是一个PHP问题,而不是我认为的WordPress问题,所以我先将这个问题标记为PHP,然后将WordPress标记为第二个。

希望有人可以提供帮助。

由于

1 个答案:

答案 0 :(得分:0)

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

我无法为此找到任何类型的PHP解决方案,或者任何能够首先输出高级帖子的解决方案,所以我的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');

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

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

虽然我们每隔30天自动修剪一次帖子,但它对我们有用,因此每个类别/每页帖子的帖子最多不应超过20-30,因此在这种情况下,这是一个可行/可用的解决方案。 / p>