
本文介绍如何精准统计当前登录用户的已支付(已完成)订单数量,并在前端面板中安全、高效地展示,避免使用过时函数或存在 sql 注入风险的硬编码查询。
在 WooCommerce 中,wc_get_customer_order_count() 默认返回用户所有订单(含待处理、取消、退款等状态),无法直接筛选“已成功支付”的订单(即 wc-completed 状态)。若需仅统计已完成订单数,必须结合订单状态进行精确过滤。
推荐使用 WooCommerce 4.0+ 原生提供的 wc_get_orders() 函数(替代直接操作数据库),它具备状态过滤、缓存支持、权限校验与兼容性保障,是更安全、可维护的方案:
array('wc-completed'),
'customer' => $current_user_id,
'limit' => 1, // 仅需计数,无需加载全部数据
'return' => 'ids', // 返回订单 ID 数组,轻量高效
'paginate' => false,
));
echo esc_html(sprintf(__('已完成订单:%d 笔', 'textdomain'), count($completed_orders)));
} else {
echo esc_html(__('请先登录查看订单', 'textdomain'));
}
?>⚠️ 注意事项:
1、对ASP内核代码进行DLL封装,从而大大提高了用户的访问速度和安全性;2、采用后台生成HTML网页的格式,使程序访问速度得到进一步的提升;3、用户可发展下级会员并在下级购买商品时获得差额利润;4、全新模板选择功能;5、后台增加磁盘绑定功能;6、后台增加库存查询功能;7、后台增加财务统计功能;8、后台面值类型批量设定;9、后台财务曲线报表显示;10、完善订单功能;11、对所有传输的字符串进行安全
- 切勿拼接 SQL 字符串:原答案中 $query 直接拼接 get_current_user_id() 存在 SQL 注入隐患,且 wp_wc_order_stats 表依赖于 WooCommerce 统计功能(需启用且数据同步),并非所有站点都可用;
- 避免全局 $wpdb 手动查询:绕过 WooCommerce 的数据抽象层易导致状态逻辑不一致(如忽略自定义订单状态、多站点 ID 映射问题);
- 务必校验用户登录态:get_current_user_id() 在未登录时返回 0,需前置判断;
- 输出需转义:使用 esc_html() 防止 XSS,尤其在主题/面板中动态渲染;
- 性能优化:设置 'limit' => 1 和 'return' => 'ids' 可显著降低数据库负载,尤其当用户订单量较大时。
✅ 最佳实践总结:优先采用 wc_get_orders() + 状态数组过滤,语义清晰、扩展性强;如需更高性能(如高频访问仪表盘),可结合 Transients 缓存结果(例如缓存 5 分钟):
$cache_key = 'user_completed_orders_' . $current_user_id;
$total = wp_cache_get($cache_key, 'orders');
if (false === $total) {
$total = count(wc_get_orders(array(
'status' => array('wc-completed'),
'customer' => $current_user_id,
'return' => 'ids',
'limit' => -1,
)));
wp_cache_set($cache_key, $total, 'orders', 5 * MINUTE_IN_SECONDS);
}
echo esc_html(sprintf(__('已完成订单:%d 笔', 'textdomain'), $total));通过以上方式,您即可在用户面板中稳定、安全、高性能地展示其成功支付的订单总数。









