限制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