2017-12-18 121 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来说太广泛了。

相关问题