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

WooCommerce我的账户订单表格自定义列无法显示优惠券求协助

修复WooCommerce「我的账户」订单表格优惠券列不显示数据的问题

你的代码存在两个核心问题导致数据无法正常展示:

  • woocommerce_my_account_my_orders_column_coupon_codes钩子传递的参数是订单ID,而非订单对象,直接调用$order->get_coupon_codes()会失效
  • get_coupon_codes()返回的是数组,直接用esc_html()输出会显示成Array,需要转成可读的字符串格式

以下是修正后的完整代码:

// 为我的账户订单表格添加优惠券列
add_filter( 'woocommerce_account_orders_columns', 'add_coupon_codes_column' );
function add_coupon_codes_column( $columns ) {
    $new_columns = [];
    
    // 保留原有列顺序,按需插入优惠券列(可调整插入位置)
    foreach ( $columns as $key => $value ) {
        $new_columns[ $key ] = $value;
        
        // 在订单日期列后插入优惠券列,修改$key可调整位置
        if ( 'order-date' === $key ) {
            $new_columns['coupon-codes'] = __( '优惠券', 'woocommerce' );
        }
    }
    
    return $new_columns;
}

// 输出优惠券列的内容
add_action( 'woocommerce_my_account_my_orders_column_coupon_codes', 'add_coupon_codes_content' );
function add_coupon_codes_content( $order_id ) {
    // 通过订单ID获取订单对象
    $order = wc_get_order( $order_id );
    
    if ( ! $order ) {
        echo '-';
        return;
    }
    
    // 获取订单使用的优惠券代码数组
    $coupon_codes = $order->get_coupon_codes();
    
    if ( empty( $coupon_codes ) ) {
        echo '无';
    } else {
        // 将数组转为逗号分隔的字符串并安全输出
        echo esc_html( implode( ', ', $coupon_codes ) );
    }
}

关键修改说明:

  1. 参数修正:通过wc_get_order( $order_id )将订单ID转换为订单对象,确保能正确调用优惠券相关方法
  2. 数组格式化:用implode(', ', $coupon_codes)把优惠券数组转成逗号分隔的字符串,避免显示Array
  3. 空值处理:订单未使用优惠券时显示“无”,提升页面可读性
  4. 列位置优化:通过遍历原有列插入优惠券列,更灵活控制显示位置(可根据需求修改插入时机)

测试注意事项:

  • 确保测试的订单确实使用了优惠券
  • 清空浏览器缓存和WooCommerce缓存后刷新页面查看效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 20:02:40