我有一个自定义用户角色,我们称之为“用户角色”,它只能创建一个自定义帖子类型,我们在许多类别下称之为 cpt。
我想要得到的是一个页面,每页显示 20 个用户(将有分页)和休闲信息(它应该只显示发布超过 2 个帖子的用户):
1)这个发布的 cpt 帖子总数用户
2) 该用户发布的类别 1 和类别 2 下的帖子总数
我尝试使用 WordPress get_users 函数来获取所有以“user-role”为角色的作者,然后循环抛出这个使用 count_many_users_posts() 找到的用户获取每个用户的帖子总数,然后使用新的 WP_Query获取指定类别中具有初始作者 ID 和蜜蜂的所有帖子。使用新的 foreach throw 这将持续发布帖子,我正在计算每个用户找到的帖子数量。
将解决方案限制为 2 个用户,逻辑似乎有效。
问题:脚本运行速度太慢,而且用户数量非常大(大约 3k),因此在另一个循环中运行 2 个循环太慢了,无法正常工作。
我在想的是使用自定义查询,我应该将选择用户表内部与指定用户角色的 usermeta 表结合起来,以仅获取所需角色的用户 ID,并且所有这些查询内部再次与来自的帖子表连接仅获取 post_type = cpt 的发布帖子,并计算返回的行数。
如果可能的话,上面加入了一个查询,该查询将根据 term_relationships 表再次过滤结果,以仅计算类别 1,2 的帖子(这应该返回到总帖子数)
我试过但没有奏效(我没有得到任何结果,但我真的认为我没有正确使用连接和 where 子句)是:
SELECT $wpdb->users.id, count(*) FROM $wpdb->users
INNER JOIN $wpdb->usermeta on $wpdb->users.id = $wpdb->usermeta.user_id
WHERE $wpdb->usermeta.meta_key = 'wp_capabilities'
AND meta_value RLIKE '[[:<:]]user-role[[:>:]]'
INNER JOIN $wpdb->posts on $wpdb->users.id = $wpdb->posts.post_author
WHERE $wpdb->posts.post_type = "cpt" AND $wpdb->posts.post_status = "publish"
having count(*)>2
我不知道我与上述内容有多接近,但这是我可以构建的,以仅在一个查询中计算特定角色用户的所有帖子,然后我想在此添加帖子的计数以上类别(我可以硬编码类别的术语 ID,因此除了 $wpdb->term_relationships 之外,无需获取此 ecuation 中的其他表)
所以在从上面得到 $ids 和 count(*) 之后,我认为结果应该再次与 $wpdb->term_relationships 内部连接,如下所示:
INNER JOIN $wpdb->term_relationships on $wpdb->term_relationships.object_id = $wpdb->posts.id
WHERE term_taxonomy_id IN (1,2)
这是我想出的,有标准的解决方案吗?或者,对于如此庞大的数据集,Wordpress 数据库和 WordPress 功能是否还没有涵盖这一点?