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 ) ); } }
关键修改说明:
- 参数修正:通过
wc_get_order( $order_id )将订单ID转换为订单对象,确保能正确调用优惠券相关方法 - 数组格式化:用
implode(', ', $coupon_codes)把优惠券数组转成逗号分隔的字符串,避免显示Array - 空值处理:订单未使用优惠券时显示“无”,提升页面可读性
- 列位置优化:通过遍历原有列插入优惠券列,更灵活控制显示位置(可根据需求修改插入时机)
测试注意事项:
- 确保测试的订单确实使用了优惠券
- 清空浏览器缓存和WooCommerce缓存后刷新页面查看效果
内容的提问来源于stack exchange,提问作者Jake W
相关产品推荐
相关产品推荐

