Woocommerce 从送货方式 ID 获取送货区域名称

Woocommerce get shipping zone name from the shipping method id

我有一个函数 returns $shipping_method_id(例如 flat_rate:3)。我想获取此运输方式费率 ID 的区域名称...

如何根据Shipping method rate ID获取区域名称?

构建将使用非常简单的 SQL 查询的自定义函数:

function get_shipping_zone_from_method_rate_id( $method_rate_id ){
    global $wpdb;

    $data = explode( ':', $method_rate_id );
    $method_id = $data[0];
    $instance_id = $data[1];

    // The first SQL query
    $zone_id = $wpdb->get_col( "
        SELECT wszm.zone_id
        FROM {$wpdb->prefix}woocommerce_shipping_zone_methods as wszm
        WHERE wszm.instance_id = '$instance_id'
        AND wszm.method_id LIKE '$method_id'
    " );
    $zone_id = reset($zone_id); // converting to string

    // 1. Wrong Shipping method rate id
    if( empty($zone_id) )   
    {
        return __("Error! doesn't exist…");
    } 
    // 2. Default WC Zone name 
    elseif( $zone_id == 0 ) 
    {
        return __("All Other countries");
    }
    // 3. Created Zone name  
    else                       
    {
        // The 2nd SQL query
        $zone_name = $wpdb->get_col( "
            SELECT wsz.zone_name
            FROM {$wpdb->prefix}woocommerce_shipping_zones as wsz
            WHERE wsz.zone_id = '$zone_id'
        " );
        return reset($zone_name); // converting to string and returning the value
    }
}

代码进入您的活动子主题(或主题)的 function.php 文件或任何插件文件。

已测试并有效。


用法示例 (输出区域名称):

// Set HERE your shipping method rate id
$rate_id = 'flat_rate:3';
// Get the zone name
$zone_name = get_shipping_zone_from_method_rate_id( $rate_id );

// Output zone name
echo  $zone_name;