在WooCommerce后台订单页添加商店信用额度自定义列
问题:在WooCommerce后台订单列表添加商店信用额度列
我已经通过代码在WooCommerce后台订单列表中添加了显示已使用优惠券的自定义列,现在想新增一列,用来显示每笔订单中使用的商店信用额度(以美元金额计)。我用的是Advanced Coupons插件,官方说明使用商店信用的订单会带有acfw_store_credits_order_paid元数据,请问能不能复制现有优惠券列的代码,整合这个元数据来实现需求?
原有实现优惠券列的代码:
// Additional custom column add_filter( 'manage_edit-shop_order_columns', 'custom_shop_order_column', 20 ); function custom_shop_order_column( $columns ) { $reordered_columns = array(); foreach( $columns as $key => $column){ $reordered_columns[$key] = $column; if( $key == 'order_status' ){ $reordered_columns['coupons'] = __( 'Coupons', 'woocommerce'); } } return $reordered_columns; } // Custom column content add_action( 'manage_shop_order_posts_custom_column', 'custom_shop_order_column_used_coupons' ); function custom_shop_order_column_used_coupons( $column ) { global $post, $the_order; if ( ! is_a( $the_order, 'WC_Order' ) ) { $the_order = wc_get_order( $post->ID ); } if ( 'coupons' === $column ) { $coupon_codes = $the_order->get_coupon_codes(); if ( ! empty($coupon_codes) ) { echo implode(', ', $coupon_codes); } } }
更新说明:我用echo '<pre>' . print_r($store_credit, true) . '</pre>';打印元数据后,得到的数组结构里包含amount键,对应实际使用的信用额度金额。
解决方案
完全可以基于现有代码扩展实现,只需要在列注册和内容渲染部分新增商店信用额度的逻辑即可,完整代码如下:
// 注册自定义列(含优惠券+商店信用额度) add_filter( 'manage_edit-shop_order_columns', 'custom_shop_order_columns', 20 ); function custom_shop_order_columns( $columns ) { $reordered_columns = array(); foreach( $columns as $key => $column){ $reordered_columns[$key] = $column; if( $key == 'order_status' ){ $reordered_columns['coupons'] = __( '已用优惠券', 'woocommerce'); $reordered_columns['store_credit'] = __( '商店信用额度', 'woocommerce'); } } return $reordered_columns; } // 渲染自定义列内容 add_action( 'manage_shop_order_posts_custom_column', 'custom_shop_order_column_content' ); function custom_shop_order_column_content( $column ) { global $post, $the_order; if ( ! is_a( $the_order, 'WC_Order' ) ) { $the_order = wc_get_order( $post->ID ); } // 处理优惠券列 if ( 'coupons' === $column ) { $coupon_codes = $the_order->get_coupon_codes(); if ( ! empty($coupon_codes) ) { echo implode(', ', $coupon_codes); } } // 处理商店信用额度列 if ( 'store_credit' === $column ) { // 获取Advanced Coupons的商店信用元数据 $store_credit_data = $the_order->get_meta('acfw_store_credits_order_paid'); // 检查是否存在有效金额 if ( ! empty($store_credit_data) && isset($store_credit_data['amount']) ) { // 格式化金额为美元格式(可根据需求调整) echo wc_price( $store_credit_data['amount'], array('currency' => 'USD') ); } else { echo '—'; // 未使用则显示短横线 } } }
代码说明:
- 列注册部分:在原有优惠券列的位置,新增了
store_credit列,标题可根据需求修改为中文或英文 - 内容渲染部分:
- 通过
get_meta('acfw_store_credits_order_paid')获取插件存储的商店信用数据 - 检查数组中的
amount键,存在则用WooCommerce内置的wc_price()格式化美元金额显示,不存在则显示短横线
- 通过
- 保持了和原有优惠券列相同的代码结构,方便后续维护
内容的提问来源于stack exchange,提问作者Laura Nixon
相关产品推荐
相关产品推荐

