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

如何让WooCommerce兼容手动输入与选择的配送州/省正确显示?

解决WooCommerce中同时兼容手动输入和选择的州/省显示问题

这个场景太常见了——WooCommerce对有预设州/省选项的国家会存储州代码,而无预设选项的国家则直接存用户手动输入的文本,咱们得把这两种情况统一处理,确保显示的都是用户能看懂的内容。

下面是修改后的代码,完美兼容两种场景:

<?php
// 获取订单的配送国家代码
$shipping_country = $order->get_shipping_country();
// 获取存储的州/省数据
$custom_order_meta = get_post_meta($order->get_order_number(), '_shipping_state', true);

if ( ! empty($custom_order_meta) ) {
    // 初始化显示用的州/省值
    $state_display = $custom_order_meta;

    // 如果订单有国家代码,尝试匹配预设州名称
    if ( ! empty($shipping_country) ) {
        // 获取对应国家的所有州数据(键是代码,值是官方名称)
        $states = WC()->countries->get_states($shipping_country);
        
        // 检查存储的州值是否是某个预设州的代码
        if ( isset($states[$custom_order_meta]) ) {
            // 如果是代码,替换成对应的州名称
            $state_display = $states[$custom_order_meta];
        }
    }

    // 安全输出州/省信息
    ?>
    <p>
        <?php printf( '<b>Region / Province:</b> %s', esc_html($state_display) ); ?>
    </p>
    <?php
}
?>

代码逻辑拆解

  • 拿国家代码做判断依据:通过$order->get_shipping_country()获取订单的配送国家代码,这是区分"预设州代码"和"手动输入文本"的核心——不同国家的州代码是独立的,必须对应匹配。
  • 自动识别并转换代码:调用WC()->countries->get_states($shipping_country)拿到对应国家的州列表,如果存储的_shipping_state值是列表里的代码键,就自动替换成对应的州名称;如果不是,说明是用户手动输入的自定义内容,直接显示即可。
  • 安全输出保障:全程用esc_html()处理输出内容,避免XSS安全风险,完全符合WooCommerce的开发规范。

额外适配提示

  • 如果需要兼容账单地址的州/省显示,只需要把get_shipping_country()换成get_billing_country(),_shipping_state换成_billing_state就行。
  • 建议定期更新WooCommerce的国家/州数据,避免出现代码和名称不匹配的情况(比如部分国家会更新行政区划)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 20:52:53