在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'; }
问题分析
- 参数空格错误:函数参数
$ order多了一个空格,导致无法正确接收订单对象,进而获取的$method为空值。PHP中空值与数字1比较('' == 1)会被解析为true,所以始终触发第一个if分支显示Check。 - 元数据获取方式适配性不足:直接使用
get_post_meta不如WooCommerce官方提供的wc_get_order_meta兼容性好。 - 代码冗余:多个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
相关产品推荐
相关产品推荐

