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

WordPress后台自定义页面统计过期WooCommerce订阅总数显示异常

修复WooCommerce过期订阅统计始终显示0的问题

原代码的问题点

  • 变量拼写错误:$subscription_expiry_coun 少了末尾的t,导致计数根本无法累加
  • wcs_get_users_subscriptions() 返回的是订阅数组,不是单个订阅对象,不能直接调用 ->has_status() 方法
  • 如果$users变量没正确获取到所有用户,也会直接导致统计无效

修正后的代码实现

方法1:遍历用户统计(适合需要关联用户信息的场景)

$subscription_expiry_count = 0;
// 获取所有用户,需要筛选用户的话可以添加get_users()的参数
$users = get_users();

foreach ($users as $user) {
    // 获取当前用户的所有订阅
    $user_subscriptions = wcs_get_users_subscriptions($user->ID);
    
    // 循环每个订阅判断状态
    if (!empty($user_subscriptions)) {
        foreach ($user_subscriptions as $subscription) {
            if ($subscription->has_status('expired')) {
                $subscription_expiry_count++;
            }
        }
    }
}

echo '<div><p>Total Expired Subscriptions</p><p>' . $subscription_expiry_count . '</p></div>';

方法2:直接查询订阅(更高效,无需遍历所有用户)

WooCommerce订阅是自定义文章类型shop_subscription,可以直接用WP_Query查询状态为expired的订阅,性能比遍历用户好很多:

// 查询所有过期订阅
$expired_subscriptions = new WP_Query(array(
    'post_type'      => 'shop_subscription',
    'post_status'    => 'expired',
    'posts_per_page' => -1,
    'fields'         => 'ids', // 只获取ID,提升查询性能
));

$subscription_expiry_count = $expired_subscriptions->found_posts;

echo '<div><p>Total Expired Subscriptions</p><p>' . $subscription_expiry_count . '</p></div>';

注意事项

  • 方法2更适合订阅量或用户量较大的场景,避免循环所有用户的额外开销
  • 确保WooCommerce Subscriptions插件已正常激活,否则相关函数和自定义文章类型不会生效
  • 把代码放到你自定义插件的后台页面回调函数里,就能在后台页面显示统计结果了

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 18:53:29