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

在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 '—'; // 未使用则显示短横线
        }
    }
}

代码说明:

  1. 列注册部分:在原有优惠券列的位置,新增了store_credit列,标题可根据需求修改为中文或英文
  2. 内容渲染部分:
    • 通过get_meta('acfw_store_credits_order_paid')获取插件存储的商店信用数据
    • 检查数组中的amount键,存在则用WooCommerce内置的wc_price()格式化美元金额显示,不存在则显示短横线
  3. 保持了和原有优惠券列相同的代码结构,方便后续维护

内容的提问来源于stack exchange,提问作者Laura Nixon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 21:37:44