根据重量和最小购物车数量免费送货
Free shipping depending on weight and on minimal cart amount
使用 WooCommerce,我需要超过一定数量 250 免费送货,但购物车中包含的重型产品除外。
有人知道我该怎么做吗?
谢谢。
对于超过一定数量的免费送货,您可以使用内置的 WooCommerce 选项。
对于某些特定产品,如果要跳过免费送货,您可以使用以下代码段。
add_filter('woocommerce_package_rates', 'hide_shipping_method_if_particular_product_available_in_cart', 10, 2);
function hide_shipping_method_if_particular_product_available_in_cart($available_shipping_methods)
{
global $woocommerce;
// products_array should be filled with all the products ids
// for which shipping method (stamps) to be restricted.
$products_array = array(
101,
102,
103,
104
);
// You can find the shipping service codes by doing inspect element using
// developer tools of chrome. Code for each shipping service can be obtained by
// checking 'value' of shipping option.
$shipping_services_to_hide = array(
'free_shipping',
);
// Get all products from the cart.
$products = $woocommerce->cart->get_cart();
// Crawl through each items in the cart.
foreach($products as $key => $item) {
// If any product id from the array is present in the cart,
// unset all shipping method services part of shipping_services_to_hide array.
if (in_array($item['product_id'], $products_array)) {
foreach($shipping_services_to_hide as & $value) {
unset($available_shipping_methods[$value]);
}
break;
}
}
// return updated available_shipping_methods;
return
}
此自定义代码将保留 免运费 方式,并在购物车金额达到 250 且如果产品为不重(此处小于 20 公斤)...如果订单少于 250 件则不允许免费送货,您可以在 woocommerce (见最后)中进行设置。
首先,您必须确保在每个重型产品中设置重量(对于简单或可变产品(在每个变体中)。此处的购物车小计是不包括税 (您可以轻松将其更改为含税).
然后这里是 woocommerce_package_rates
过滤器钩子中的自定义钩子函数:
add_filter( 'woocommerce_package_rates', 'conditionally_hide_other_shipping_based_on_items_weight', 100, 1 );
function conditionally_hide_other_shipping_based_on_items_weight( $rates ) {
// Set HERE your targeted weight (here is 20 kg) <== <== <== <== <==
$targeted_product_weight = 20;
// Set HERE your targeted cart amount (here is 250) <== <== <== <== <==
$targeted_cart_amount = 250;
// For cart subtotal amount EXCLUDING TAXES
$passed = WC()->cart->subtotal_ex_tax >= $targeted_cart_amount ? true : false;
// For cart subtotal amount INCLUDING TAXES (replace by this):
// $passed = WC()->cart->subtotal >= $targeted_cart_amount ? true : false;
$light_products_only = true; // Initializing
// Iterating trough cart items to get the weight for each item
foreach( $package['contents'] as $cart_item ){
// Getting the product weight
$product_weight = $cart_item['data']->get_weight();
if( !empty($product_weight) && $product_weight >= $targeted_product_weight ){
$light_products_only = false;
break;
}
}
// If 'free_shipping' method is available and if products are not heavy
// and cart amout up to the target limit, we hide other methods
$free = array();
foreach ( $rates as $rate_id => $rate ) {
if ( 'free_shipping' === $rate->method_id && $passed && $light_products_only ) {
$free[ $rate_id ] = $rate;
break;
}
}
return ! empty( $free ) ? $free : $rates;
}
代码进入您的活动子主题(或主题)的 function.php 文件或任何插件文件。
此代码已经过测试,适用于简单且可变的产品……
You Will also have to in WooCommerce settings > Shipping, for each shipping zone and for the "Free Shipping"
method your minimum order amount:
You will need to refresh shipping cached data: disable, save and enable, save related shipping methods for the current shipping zone, in woocommerce shipping settings.
使用 WooCommerce,我需要超过一定数量 250 免费送货,但购物车中包含的重型产品除外。
有人知道我该怎么做吗?
谢谢。
对于超过一定数量的免费送货,您可以使用内置的 WooCommerce 选项。
对于某些特定产品,如果要跳过免费送货,您可以使用以下代码段。
add_filter('woocommerce_package_rates', 'hide_shipping_method_if_particular_product_available_in_cart', 10, 2);
function hide_shipping_method_if_particular_product_available_in_cart($available_shipping_methods)
{
global $woocommerce;
// products_array should be filled with all the products ids
// for which shipping method (stamps) to be restricted.
$products_array = array(
101,
102,
103,
104
);
// You can find the shipping service codes by doing inspect element using
// developer tools of chrome. Code for each shipping service can be obtained by
// checking 'value' of shipping option.
$shipping_services_to_hide = array(
'free_shipping',
);
// Get all products from the cart.
$products = $woocommerce->cart->get_cart();
// Crawl through each items in the cart.
foreach($products as $key => $item) {
// If any product id from the array is present in the cart,
// unset all shipping method services part of shipping_services_to_hide array.
if (in_array($item['product_id'], $products_array)) {
foreach($shipping_services_to_hide as & $value) {
unset($available_shipping_methods[$value]);
}
break;
}
}
// return updated available_shipping_methods;
return
}
此自定义代码将保留 免运费 方式,并在购物车金额达到 250 且如果产品为不重(此处小于 20 公斤)...如果订单少于 250 件则不允许免费送货,您可以在 woocommerce (见最后)中进行设置。
首先,您必须确保在每个重型产品中设置重量(对于简单或可变产品(在每个变体中)。此处的购物车小计是不包括税 (您可以轻松将其更改为含税).
然后这里是 woocommerce_package_rates
过滤器钩子中的自定义钩子函数:
add_filter( 'woocommerce_package_rates', 'conditionally_hide_other_shipping_based_on_items_weight', 100, 1 );
function conditionally_hide_other_shipping_based_on_items_weight( $rates ) {
// Set HERE your targeted weight (here is 20 kg) <== <== <== <== <==
$targeted_product_weight = 20;
// Set HERE your targeted cart amount (here is 250) <== <== <== <== <==
$targeted_cart_amount = 250;
// For cart subtotal amount EXCLUDING TAXES
$passed = WC()->cart->subtotal_ex_tax >= $targeted_cart_amount ? true : false;
// For cart subtotal amount INCLUDING TAXES (replace by this):
// $passed = WC()->cart->subtotal >= $targeted_cart_amount ? true : false;
$light_products_only = true; // Initializing
// Iterating trough cart items to get the weight for each item
foreach( $package['contents'] as $cart_item ){
// Getting the product weight
$product_weight = $cart_item['data']->get_weight();
if( !empty($product_weight) && $product_weight >= $targeted_product_weight ){
$light_products_only = false;
break;
}
}
// If 'free_shipping' method is available and if products are not heavy
// and cart amout up to the target limit, we hide other methods
$free = array();
foreach ( $rates as $rate_id => $rate ) {
if ( 'free_shipping' === $rate->method_id && $passed && $light_products_only ) {
$free[ $rate_id ] = $rate;
break;
}
}
return ! empty( $free ) ? $free : $rates;
}
代码进入您的活动子主题(或主题)的 function.php 文件或任何插件文件。
此代码已经过测试,适用于简单且可变的产品……
You Will also have to in WooCommerce settings > Shipping, for each shipping zone and for the
"Free Shipping"
method your minimum order amount:
You will need to refresh shipping cached data: disable, save and enable, save related shipping methods for the current shipping zone, in woocommerce shipping settings.