You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress插件开发问题:用户文章统计仅显示最后一条记录

解决WordPress插件中用户文章数表格只显示最后一条的问题

兄弟,我一看你这问题就知道大概率踩了数组赋值的坑,再加上用count_users()的方式不对,咱们一步步来捋:

先说说你现有代码的问题

  1. count_users()用错了:这个函数返回的是总用户数和各角色的用户统计(比如管理员有几个、编辑有几个),根本拿不到具体的用户ID列表。而且用户ID不一定是从1到总用户数连续的(比如删过用户的话ID会断号),用它来循环用户ID完全不靠谱,会漏掉很多真实用户。
  2. 数组赋值覆盖了旧数据:你在for循环里应该是每次把新数据直接赋值给$result,而不是追加到数组里(比如写了$result = ...而不是$result[] = ...),这样循环到最后,$result里就只剩最后一次循环的那条数据了。

给你个靠谱的解决方案

直接用WordPress的$wpdb做关联查询,一次性拿到所有用户的ID、用户名和对应的文章数,然后再循环输出表格,既高效又不会出错:

global $wpdb;

// 关联用户表和文章表,统计每个用户的已发布文章数
$user_post_counts = $wpdb->get_results(
    "SELECT 
        u.ID, 
        u.user_login, 
        COUNT(p.ID) AS post_count
    FROM {$wpdb->users} u
    LEFT JOIN {$wpdb->posts} p ON u.ID = p.post_author AND p.post_status = 'publish' AND p.post_type = 'post'
    GROUP BY u.ID
    ORDER BY post_count DESC",
    ARRAY_A
);

// 输出HTML表格
echo '<table border="1">';
echo '<tr><th>用户ID</th><th>用户名</th><th>文章数量</th></tr>';
foreach ($user_post_counts as $user) {
    echo '<tr>';
    echo '<td>' . esc_html($user['ID']) . '</td>';
    echo '<td>' . esc_html($user['user_login']) . '</td>';
    echo '<td>' . esc_html($user['post_count']) . '</td>';
    echo '</tr>';
}
echo '</table>';

代码里的细节说明

  • 用LEFT JOIN是为了保证即使某个用户一篇文章都没写,也会显示出来(文章数为0)。
  • 加了p.post_status = 'publish'和p.post_type = 'post',只统计已发布的文章,如果你要算草稿或者其他类型的内容,可以调整这两个条件。
  • 用esc_html()来转义输出内容,避免XSS安全问题,这在WordPress开发里是必须的哦。

内容的提问来源于stack exchange,提问作者skirnich57

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:16:22