0

我有一个自定义用户角色,我们称之为“用户角色”,它只能创建一个自定义帖子类型,我们在许多类别下称之为 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 功能是否还没有涵盖这一点?

4

1 回答 1

0

您可以尝试以下查询,以获取自定义帖子类型中用户级别 = 10 的每个作者的帖子数

SELECT COUNT(u.`ID`) AS post_count,p.`ID`,u.`user_nicename`   FROM
`wp_posts` p 
LEFT JOIN  `wp_users` u ON( p.`post_author`=u.`ID`) 
INNER JOIN `wp_usermeta`  um ON (u.`ID` = um.`user_id` AND um.`meta_key`='wp_user_level')    
WHERE p.`post_type`='cpt' AND p.`post_status`='publish' AND um.`meta_value`='10'
GROUP BY u.`ID`
HAVING post_count>2

此查询用于特定类别中作者的帖子计数

SELECT COUNT(CASE WHEN wtt.`term_id`='3' THEN u.`ID` END) AS cat1_count,
COUNT(CASE WHEN wtt.`term_id`='4' THEN u.`ID` END) AS cat2_count,
p.`ID`,u.`user_nicename`   FROM
 `wp_users` u 
INNER JOIN `wp_usermeta`  um ON (u.`ID` = um.`user_id` AND um.`meta_key`='wp_user_level')
LEFT JOIN `wp_posts` p ON(u.`ID`= p.`post_author`)
LEFT JOIN `wp_term_relationships` wtr ON (p.`ID` = wtr.`object_id`) 
LEFT JOIN `wp_term_taxonomy` wtt ON (wtr.`term_taxonomy_id`=wtt.`term_taxonomy_id`)
WHERE p.`post_type`='cpt' AND p.`post_status`='publish' AND um.`meta_value`='10'
GROUP BY u.`ID`

对于虚拟类别 no.si 已使用 termid 3 和 4 进行计数,您需要添加适当的 termid 以计算指定类别中作者的帖子

于 2013-10-10T22:16:35.540 回答