从州代码获取运输状态的名称,或者如果用户在WooCommerce中输入运输状态的名称

问题描述

在我的情况下,对于没有添加州的国家,我有以下代码显示名称(仅在用户手动编写时显示该文本)。

但是,如果用户选择的国家/地区确实添加了州,则它会显示代码而不是州名:`

<?PHP
    $custom_order_Meta = get_post_meta($order->get_order_number(),'_shipping_state',true);

    if( ! empty($custom_order_Meta) )
    { ?>
<p> <?PHP
printf( '<b>Region / Province:</b> ' . esc_html( '%s','woocommerce' ),esc_html($custom_order_Meta)  );?> 
</p> <?PHP 
    }
    ?>

Get state name instead of the code in Woocommerce 答案代码的启发,该答案代码显示了客户所在国家/地区的名称。但是,当客户手动键入该代码时,此代码无法处理。

用户键入和选择时,如何在两种情况下都能正常工作?

解决方法

尝试以下(假设将$order变量定义为当前WC_Order对象)

<?php
    $shipping_country = $order->get_shipping_country();
    $shipping_state   = $order->get_shipping_state();
    
    if( ! empty($shipping_state) ) {
        $country_states   = WC()->countries->get_states( $shipping_country );

        $value = isset($country_states[$shipping_state]) ? $country_states[$shipping_state] : $shipping_state;
        
        if( ! empty($value) ) {
            echo '<p><strong>' . __("Region / Province","woocommerce") . '</strong>: ' . esc_html($value) . '</p>';
        }
    }
?>

经过测试可以正常工作。