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

在WooCommerce订单详情中将元值转换为文本显示支付方式

WooCommerce后台订单详情支付方式文本显示问题解决

更新:已在下方示例中解决。

我尝试基于自定义订单字段billing_payment在后台订单详情页显示对应的支付方式文本,但目前代码始终显示'Check',无法根据字段数值显示正确的文本(比如数值2对应ACH、3对应信用卡等),只能显示数值,现在需要把数值转成对应文本。

原问题代码

add_action( 'woocommerce_admin_order_data_after_shipping_address', 'my_custom_checkout_field_display_admin_order_meta', 10, 1 );
function my_custom_checkout_field_display_admin_order_meta( $ order ){
    $order_id = method_exists( $order, 'get_id' ) ? $order->get_id() : $order->id;
    $method = get_post_meta( $order_id, 'billing_payment', true );
        if ( $method == 1 )
                print '<p><strong>Payment Method:</strong></p> Check';
    
        else if ( $method == 2 )
                print '<p><strong>Payment Method:</strong></p> ACH';
    
        else if ( $method == 3 )
                print '<p><strong>Payment Method:</strong></p> Credit Card';
    
        else if ( $method == 4 )
                print '<p><strong>Payment Method:</strong></p> Master Nursery';
}

问题分析

  1. 参数空格错误:函数参数$ order多了一个空格,导致无法正确接收订单对象,进而获取的$method为空值。PHP中空值与数字1比较('' == 1)会被解析为true,所以始终触发第一个if分支显示Check。
  2. 元数据获取方式适配性不足:直接使用get_post_meta不如WooCommerce官方提供的wc_get_order_meta兼容性好。
  3. 代码冗余:多个if-else判断不够简洁,后续维护成本高。

修正后的代码

add_action( 'woocommerce_admin_order_data_after_shipping_address', 'my_custom_checkout_field_display_admin_order_meta', 10, 1 );
function my_custom_checkout_field_display_admin_order_meta( $order ){
    // 获取订单ID(适配WooCommerce新版本)
    $order_id = $order->get_id();
    // 获取自定义支付方式字段值
    $method = wc_get_order_meta( $order_id, 'billing_payment', true );
    
    // 字段为空时直接返回,避免无效输出
    if ( empty( $method ) ) return;
    
    // 建立数值与支付方式文本的映射关系
    $payment_map = [
        1 => 'Check',
        2 => 'ACH',
        3 => 'Credit Card',
        4 => 'Master Nursery'
    ];
    
    // 获取对应文本,无匹配时显示原数值
    $payment_text = isset( $payment_map[$method] ) ? $payment_map[$method] : $method;
    
    // 输出安全规范的内容
    echo '<p><strong>Payment Method:</strong> ' . esc_html( $payment_text ) . '</p>';
}

修正说明

  • 修复参数空格问题,确保订单对象正常传递。
  • 使用wc_get_order_meta获取订单元数据,适配WooCommerce的订单数据结构,兼容性更强。
  • 用数组映射替代if-else判断,代码更简洁,后续新增支付方式只需修改映射数组即可。
  • 添加空值判断,避免字段为空时输出无效内容。
  • 使用esc_html转义输出文本,防止XSS安全风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 07:11:09