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

求助:在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 22:50:01