2017-02-15 2 views
1

Ich möchte alle Daten (zone_name, zone_id) erhalten, wenn freie Versandzone haben. Ich habe verwendet:Alle Free Shipping Zones erhalten die Standardzone "Rest der Welt"

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

aber es zurückkehren immer das Ergebnis ohne Rest der Welt. Wie bekomme ich alle Daten mit allen Kostenloser Versand Zonen?

Antwort

3

Ich habe Ihre Antwort nach einer Suche in diesem official thread related to WC 2,6+ and Shipping default Zone und auch im Quellcode WC_Shipping_Zone Klasse. Sie erfahren, dass die Standardklasse ID = 0 hat.

Ich habe diese zuerst versucht:

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

Und ich habe dieses Array:

WC_Shipping_Zone Object ([_data: protected] => Array ([zone_id] => 0
[ zone_name] => Rest der Welt [zone_order] => 0 [zone_locations] => Array()) [_locations_changed: WC_Shipping_Zone: privat] => [_cache_group: protected] => [_meta_type: protected] => post [object_id_field_for_meta : protected] => [_meta_data: protected] => Array() [_internal _meta_keys: protected] => Array())

Bingo 1! Dort werden die Daten und ich erhalte die Standard-Versand Zone Objekt, aber es ist geschützt und nicht zugänglich durch eine foreach-Schleife oder etwas anderes ...

Wenn Sie WC_Shipping_Zone schauen Sie sehen tha es erstrecktWC_Data Klasse.
So habe ich versucht, WC_Data Methoden mit dem Objekt, auf diese Weise zu verwenden:

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

Bingo 2 !!! Es gibt das sam-Array aus, aber dieses Mal ist es nicht geschützt und zugänglich.

Die Antwort ist also:

$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 

Die Ausgabe von echo $default_zone_name ist Rest der Welt (Re-Bingo !!!) ...

Das können Sie auch andere verwenden WC_Data und WC_Shipping_Zone Methoden, um die benötigten Daten zu erhalten:

$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

danke deine antwort aber kannst du mir helfen ** zone_name ** und ** zone_id ** von nur ** Kostenloser Versand ** methode? – huykon225

+0

Appriciate deine Antwort. Ich habe den Weg gefunden, alles zu bekommen. Ich werde hier eine Antwort posten und deinen Skype hinzufügen. ich danke dir sehr ! – huykon225

+0

ja @LoicTheAztec. Es hilft mir so sehr. danke nochmal – huykon225

1

danke für die Antwort von @LoicTheAztec. nachdem ich ihn gelesen habe, habe ich den Weg gefunden. hier ist alles:

$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

Ich kenne deine Hilfe und schätze es. Ich stimme für Ihre Antwort. – huykon225

Verwandte Themen