2017-12-18 140 views
0

我使用的是WooCommerce 3.2.6,而我想要實現的是我想爲每個單獨產品設置不同的運輸區域。WooCommerce有條件的運輸區域爲每個產品單獨選擇

我有需要根據自定義框尺寸計算運費的產品,我使用FEDEX API進行費率計算。爲了實現這一點,我需要一些代碼或過濾器,我可以設置不同的運輸區域只有特定的產品。

這裏有一段代碼,我可以通過這個代碼來將產品映射到發貨區,但是接下來我不能着手實際上只設置那個運輸區來在網站前端顯示價格。任何幫助將高度讚賞。

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; 
} 

回答

0

首先你應該$zone需要而不是WC_Shipping_Zones

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

至於WC_Shipping_Zones class,沒有任何可用的制定者方法...

現在我認爲,按照您試圖的方式,通過運輸區域以簡單的方式設置產品是不太可能的做(可能是我錯了)。如果這是可能的,這將是一個真正的高級開發,並且對於StackOverFlow來說太廣泛了。

相關問題