求助:在WooCommerce中按状态统计并显示订单数量
解决方案
问题原因
你原代码里的wp_count_posts('shop_order')统计的是全站所有用户对应状态的订单总量,而非当前登录客户的个人订单数,这是不符合需求的核心问题。
修改后的代码
替换原函数为以下代码,它会精准统计当前登录用户的对应状态订单数量:
function display_user_woocommerce_order_count( $atts, $content = null ) { // 用户未登录时返回提示 if ( ! is_user_logged_in() ) { return '请先登录查看个人订单统计'; } $args = shortcode_atts( array( 'status' => 'completed', // 默认统计已完成订单 ), $atts ); // 处理状态参数,支持多状态逗号分隔 $statuses = array_map( 'trim', explode( ',', $args['status'] ) ); $formatted_statuses = array(); foreach ( $statuses as $status ) { // 自动补全wc-前缀 $formatted_statuses[] = strpos( $status, 'wc-' ) === 0 ? $status : 'wc-' . $status; } // 查询当前用户的对应状态订单 $order_query = new WC_Order_Query( array( 'customer_id' => get_current_user_id(), 'status' => $formatted_statuses, 'return' => 'ids', // 只返回订单ID,提升查询性能 ) ); $orders = $order_query->get_orders(); $order_count = count( $orders ); return number_format( $order_count ); } add_shortcode( 'wc_user_order_count', 'display_user_woocommerce_order_count' );
使用方法
在客户账户页面(或任意需要的位置)添加对应短代码即可:
- 显示已完成订单数量:
[wc_user_order_count status="completed"] - 显示已取消订单数量:
[wc_user_order_count status="cancelled"] - 显示处理中订单数量:
[wc_user_order_count status="processing"] - 同时统计多状态订单(比如已完成+处理中):
[wc_user_order_count status="completed,processing"]
代码说明
- 新增登录判断,避免未登录用户看到无效数据
- 用
WC_Order_Query专门查询当前用户订单,确保数据精准 - 兼容带/不带
wc-前缀的状态参数,使用更灵活 - 仅返回订单ID列表,减少数据查询量,优化页面加载速度
内容的提问来源于stack exchange,提问作者MohammadMehdi
相关产品推荐
相关产品推荐

