2017-02-15 42 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