如何获取WordPress中自定义文章类型投稿量最多的作者信息
获取WordPress中拥有最多自定义文章类型投稿的作者信息
嘿,我来帮你搞定这个需求——要找出WordPress里投稿自定义文章类型最多的作者,咱们可以从WP_User_Query优化和直接SQL查询两个方向入手,具体来看:
方法一:优化WP_User_Query实现
你原来的代码其实有个小问题:默认的post_count统计的是所有文章类型(包括WordPress自带的post、page这些),如果只想统计特定的自定义文章类型,咱们得借助钩子修改查询逻辑,直接关联文章表过滤类型。这里给你调整后的代码:
// 先定义你要统计的自定义文章类型,比如'product'、'portfolio',支持多个 $target_post_types = array('product'); // 初始化用户查询 $author_query = new WP_User_Query(array( 'order' => 'DESC', )); // 添加钩子修改查询,关联文章表并过滤自定义类型 add_action('pre_user_query', function($query) use ($target_post_types) { global $wpdb; // 关联wp_posts表,关联用户ID和文章作者ID $query->query_from .= " LEFT JOIN {$wpdb->posts} ON {$wpdb->users}.ID = {$wpdb->posts}.post_author "; // 过滤指定的自定义文章类型,同时只统计已发布的文章(可根据需求去掉) $type_list = "'" . implode("','", $target_post_types) . "'"; $query->query_where .= " AND {$wpdb->posts}.post_type IN ({$type_list}) AND {$wpdb->posts}.post_status = 'publish' "; // 按自定义文章投稿数降序排序 $query->query_orderby = " ORDER BY COUNT({$wpdb->posts}.ID) DESC "; // 按用户ID分组,避免同一作者被重复统计 $query->query_groupby = " GROUP BY {$wpdb->users}.ID "; }); // 获取查询结果 $authors = $author_query->get_results(); // 遍历输出作者信息,顺带输出投稿数 foreach ($authors as $author) { // 计算该作者的自定义文章投稿数 $custom_post_count = count_user_posts($author->ID, $target_post_types); echo "作者ID:{$author->ID} | 名称:{$author->display_name} | 自定义文章投稿数:{$custom_post_count}<br>"; }
这段代码的核心是用pre_user_query钩子改写了用户查询的SQL结构,精准过滤了你需要统计的自定义文章类型,还加入了发布状态的过滤(如果不需要统计草稿或待审文章,可以保留这个条件)。
方法二:直接使用SQL查询
如果你觉得钩子方法有点绕,直接写SQL查询会更直观,而且执行效率也不错:
SELECT u.ID, u.display_name, COUNT(p.ID) AS custom_post_count FROM wp_users u LEFT JOIN wp_posts p ON u.ID = p.post_author WHERE p.post_type IN ('product') -- 替换成你的自定义文章类型,支持多个比如('product','portfolio') AND p.post_status = 'publish' -- 可选,只统计已发布内容 GROUP BY u.ID, u.display_name ORDER BY custom_post_count DESC -- LIMIT 5; -- 可选,比如只取投稿数前5的作者
注意:记得把wp_替换成你自己的WordPress数据库表前缀。如果要统计所有自定义文章类型(排除默认的post、page、attachment),可以把WHERE条件改成:
WHERE p.post_type NOT IN ('post', 'page', 'attachment') AND p.post_status = 'publish'
这样就能自动统计所有你创建的自定义文章类型了。
内容的提问来源于stack exchange,提问作者Jomol MJ
相关产品推荐
相关产品推荐

