2017-12-18 4 views
0

Ich benutze WooCommerce 3.2.6 und Thing möchte ich erreichen, ist Ich möchte verschiedene Shipping Zone für jedes einzelne Produkt einrichten.WooCommerce Conditional Shipping Zone Auswahl für jedes Produkt einzeln

Ich habe Produkte, die Versandrate basierend auf benutzerdefinierten Box Dimensionen berechnet und ich verwende FEDEX API für die Berechnung der Preise. Um dies zu erreichen, brauche ich ein Stück Code oder Filter, mit dem ich verschiedene Versandzonen nur für bestimmte Produkte einrichten kann.

Hier ist ein Stück Code, mit dem ich in der Lage war, das Produkt mit Shipping Zone MAP, aber dann konnte ich nicht weiter gehen, nur SET SHOW ZONE zu bringen und zeigen Preise im Frontend der Website. Jede Hilfe wäre sehr geschätzt.

add_action('wp_head','show_only_selected_zone', 2, 10); 
function show_only_selected_zone() { 

//if(is_product) { 
global $post; 
$product_id = get_the_ID(); 
$product_name = get_the_title($product_id); 
$explode_product = explode(" ",$product_name); 

     $all_zones = orig_get_all_zones(); 

     foreach ($all_zones as $key => $zone) { 
      //echo "<pre>";print_r($zone);echo "</pre>"; 
      $extracted_zone = $zone['zone_name']; 
      $zone_id = $zone['zone_id']; 
      if(in_array($extracted_zone,$explode_product)) { 
       //echo 'This is Extracted Zone: '.$extracted_zone. ' '. $zone_id; 
       $set_zone_id = $zone_id; 
       echo $set_zone_id; 
       $zone = WC_Shipping_Zones::set_zone_by('zone_id', $set_zone_id); 
       //echo 'Zone Result May be: '.$zone; 
       break; 
      } 

     //echo "<pre>";print_r($zone);echo "</pre>"; 
     //echo $zone['zone_name'].'<br>'; 
     } 

} 


function orig_get_all_zones() { 
if(class_exists('WC_Shipping_Zones')) { 
    $all_zones = WC_Shipping_Zones::get_zones(); 
    return $all_zones; 
} 
return false; 
} 
function orig_get_zone($zone_id = 0) { 
if(class_exists('WC_Shipping_Zones')) { 
    $the_zone = WC_Shipping_Zones::get_zone($zone_id); 
    return $the_zone; 
} 
return false; 
} 

Antwort

0

zuerst Ihre $zone sollte stattdessen müssen sein (WC_Shipping_Zone ohne s):

$zone = WC_Shipping_Zone::set_zone_by('zone_id', $set_zone_id); 

Was WC_Shipping_Zones class gibt keine verfügbaren Setter ist Methoden ...

Jetzt Ich denke, dass es nicht wirklich möglich ist, Produkte nach Versandzone auf eine einfache Weise zu setzen, wie Sie es versuchen tun (kann ich falsch liegen). Wenn das möglich ist, wird es eine echte fortgeschrittene Entwicklung und etwas zu weites für StackOverFlow.

Verwandte Themen