限制WooCommerce中只有一个国家的航运班

问题描述:

我正在使用Woocommerce,并且我想限制航运班'酗酒者',并且只允许它仅用于意大利和其他国家,您是否可以帮助我使用此代码?非常感谢您的帮助!限制WooCommerce中只有一个国家的航运班

function($is_available) { 

$cart_items = WC()->cart->get_cart(); 

foreach ($cart_items as $cart_item) { 

    $product = $cart_item['data']; 
    $class = $product->get_shipping_class(); 

    if ($class === 'alcoholics') { 
     return false; 
    } 
} 

return $is_available; 
} 

add_filter('woocommerce_states', 'AL_woocommerce_states'); 


function AL_woocommerce_states($states) { 


    $states['IT'] = array(
    'AG' => __('Agrigento', 'woocommerce'), 
    'AL' => __('Alessandria', 'woocommerce'), 
    'AN' => __('Ancona', 'woocommerce'), 
    'AO' => __('Aosta', 'woocommerce'), 
    'AR' => __('Arezzo', 'woocommerce'), 
    'AP' => __('Ascoli Piceno', 'woocommerce'), 
    'AT' => __('Asti', 'woocommerce'), 
    'AV' => __('Avellino', 'woocommerce'), 
    'BA' => __('Bari', 'woocommerce'), 
    'BT' => __('Barletta-Andria-Trani', 'woocommerce'), 
    'BL' => __('Belluno', 'woocommerce'), 
    'BN' => __('Benevento', 'woocommerce'), 
    'BG' => __('Bergamo', 'woocommerce'), 
    'BI' => __('Biella', 'woocommerce'), 
    'BO' => __('Bologna', 'woocommerce'), 
    ); 

    return $states; 
} 

感谢

你不能限制航运类本身。国家限制是由女船员的女仆,你可以为他们每个人设置特定的运输方式。航运类别允许在每个“统一费率”运输方法中操纵费率。

最后,您可以为产品(或产品差异)设置装运等级,这将允许您为所选产品设定自定义装运方式费率。

add_filter('woocommerce_package_rates', 'manipulating_shipping_flat_rates', 10, 2); 
function custom_delivery_flat_rate_cost_calculation($rates, $package) 
{ 
    // Initializing variables 
    $has_products = false; 
    $has_cat = false; 

    // Iterating through all cart items 
    foreach(WC()->cart->get_cart() as $cart_item): 

     $product_id = $cart_item['product_id']; // product ID 
     $variation_id = $cart_item['variation_id']; // variation ID 

     // Detecting a targeted product category 
     if(has_term('clothing', 'product_cat', $product_id)) 
      $has_cat = true; 

     // Detecting specific product IDs 
     if (in_array($cart_item['product_id'], array(20, 22, 28, 47, 58))) 
      $has_products = true; 
    endforeach; 


    foreach($rates as $rate_key => $rate_values){ 
     $method_id = $rate_values->method_id; 
     $rate_id = $rate_values->id; 

     // Targetting Flat rate Shipping Method 
     if ('flat_rate' === $rate_values->method_id) { 


      ## 1) UNSETTING RATE IDs 

      // for a product category 
      if ($has_cat) { 
       unset($rates['flat_rate:5']); 
      } 
      // for a product Ids 
      if ($has_products) { 
       unset($rates['flat_rate:14']); 
      } 

      ## 2) Manipulating specif Rates IDs prices 

      // for a product category and a specific rate ID 
      if ($has_cat && 'flat_rate:8' == $rate_id) { 
       $rates[$rate_id]->cost = $rates[$rate_id]->cost * 0.1; 
       $rates[$rate_id]->taxes[1] = $rates[$rate_id]->taxes[1] * 0.1; 
      } 
      // for a product Ids and a specific rate ID 
      if ($has_products && 'flat_rate:11' == $rate_id) { 
       $rates[$rate_id]->cost = $rates[$rate_id]->cost * 0.1; 
       $rates[$rate_id]->taxes[1] = $rates[$rate_id]->taxes[1] * 0.1; 
      } 
     } 
    } 

    return $rates; 
} 

您需要更改代码中设置自己:

相反,你可以通过使用woocommerce_package_rates过滤钩子其独特率ID有条件操纵各运输方式在运输区域设置产品类别,产品编号,运费标识和费率成本,以使其满足您的需求...

代码发送到您活动的儿童主题(或主题)的function.php文件中,也可以放在任何插件文件中。


相关答案:WooCommerce: update custom fields after checkout validation failure

你可以得到这个工作使用下面的插件: https://wordpress.org/plugins/advanced-shipping-validation-for-woocommerce