2017-02-15 83 views
1

我想获得所有数据(zone_name,zone_id)时有免费送货区域。我已经使用:获取所有免费运送区域包括默认区域“世界其他地区”

$delivery_zones = WC_Shipping_Zones::get_zones(); 
foreach ((array) $delivery_zones as $key => $the_zone) { 
    echo $the_zone['zone_name']; 
} 
print_r($delivery_zones); 

但它始终返回结果,而不世界的休息。我怎样才能得到所有的数据Free Shipping zones

回答

3

我在official thread related to WC 2,6+ and Shipping default Zone以及WC_Shipping_Zone类的源代码中找到了一些搜索后的答案。您将了解到默认类有一个ID = 0

我曾尝试该第一:

$default_zone = new WC_Shipping_Zone(0); 
print_r($default_zone); 

我得到这个数组:

WC_Shipping_Zone对象([_data:保护] =>数组([zone_id] => 0
[ zone_name] =>世界其他地区 [zone_order] => 0 [zone_locations] => Array())[_locations_changed:WC_Shipping_Zone:private] => [_cache_group:protected] => [_meta_type:protected] => post [object_id_field_for_meta :protected] => [_meta_data:protected] => Array()[_internal _meta_keys:protected] => Array())

宾果1!该数据是有,我得到默认发货区对象,但它是保护无法访问通过foreach循环或其他什么东西......

如果你看看WC_Shipping_Zone你看到塔它延伸WC_Data class。
所以我试图用WC_Data方法与对象,这种方式:

$default_zone = new WC_Shipping_Zone(0); 
$default_zone_data = $default_zone->get_data(); 
print_r($default_zone_data); 

宾果2!它会输出sam数组,但这次不受保护和访问。

所以答案是:

$default_zone = new WC_Shipping_Zone(0); 
$default_zone_data = default_zone->get_data(); 

$default_zone_id = $default_zone_data->zone_id; 
$default_zone_order = $default_zone_data-> zone_order; 
$default_zone_locations = $default_zone_data-> zone_locations; 
$default_zone_meta_data = $default_zone_data-> meta_data; 

// AND TO FINISH THE THE NAME!!! 
$default_zone_name = $default_zone_data->zone_name; 

echo $default_zone_name 

echo $default_zone_name输出是世界其他地区(重宾果!)的...

的,你可以使用还有其他WC_DataWC_Shipping_Zone方法来获取所需的数据:

$default_zone = new WC_Shipping_Zone(0); 
$default_zone_formatted_location = $default_zone->get_formatted_location(); 
$default_zone_shipping_methods$ = default_zone->get_shipping_methods(); 

// And so on … 
+0

谢谢你的回答,但你能帮我得到** zone_name **和** zone_id **只是**免费送货**方法? – huykon225

+0

Appriciate你的答案。我找到了获得所有价值的方式。我会在这里发布一个答案并添加你的Skype。非常感谢 ! – huykon225

+0

是@LoicTheAztec。它对我非常有帮助。再次感谢 – huykon225

1

感谢@LoicTheAztec的回答。在读完他的回答后,我找到了结果。这里是所有的:

$zones = array(); 

    // Rest of the World zone 
    $zone             = new \WC_Shipping_Zone(0); 
    $zones[$zone->get_zone_id()]       = $zone->get_data(); 
    $zones[$zone->get_zone_id()]['formatted_zone_location'] = $zone->get_formatted_location(); 
    $zones[$zone->get_zone_id()]['shipping_methods']  = $zone->get_shipping_methods(); 

    // Add user configured zones 
    $zones = array_merge($zones, WC_Shipping_Zones::get_zones()); 
    foreach ($zones as $each_zone) { 
     $zone_name   = $each_zone['zone_name']; 
     $shipping_methods  = $each_zone['shipping_methods']; 
     $arr_shipping_methods = json_decode(json_encode($shipping_methods), true); 
     foreach ($arr_shipping_methods as $free_shipping) { 
      if ($free_shipping['id'] == 'free_shipping') { 
       $zone_id = $each_zone['zone_id']; 
      } else { 
       echo ''; 
      } 
     } 

    } 
+0

我知道你的协助并感谢你。我有你的答案投票。 – huykon225