Woocommerce使用Local Pickup Plus插件安装。必须拾取产品A,并将其设置为“必须拾取”。产品B单独出售,并且也是与产品A同步销售的商品。它设置为“可以提货”,并且具有统一运费。如果产品B是单独购买的,则客户可以选择取货或统一运费。与产品A一起购买产品B时,只能将其取货。但是,当产品A和产品B都放在购物车中时,会显示两种运输方式-产品A的本地取货和产品B的统一费率。
也许我在找不到的地方设置有误,但是当选择本地取件时,没有其他可用的送货方式。我已经尝试了许多代码变体,有些可以工作,而有些则根本没有。
这将导致WSOD:
add_filter( 'woocommerce_package_rates', 'unset_wc_shipping_methods_when_cat', 10 ,2 );
function unset_wc_shipping_methods_when_cat ( $rates, $package ) {
$product_category = 'birth-pool-hire';
// loop through the cart
foreach ( $cart->get_cart() as $cart_item ) {
if ( has_term( $product_category, 'product_cat', $cart_item['product_id'] ) )
$local_pickup = $rates['local_pickup_plus'];
$rates = array();
$rates['local_pickup_plus'] = $local_pickup_plus;
}
return $rates;
}
这可以正确删除固定费率,但是您不能再选择取货地点(两种送货方式均显示为“本地取货:$ 0.00”,并且最上面的送货方式缺少选择取货地点框。 https://gist.github.com/rynaldos/9de09f00765c83868fb7fbd731c3aa1b
我也在这里尝试了代码,将local_pickup更改为local_pickup_plus,但这导致取件位置框消失了-仍然显示Shipping 2统一费率。 Remove shipping Flat Rate method for particular Category in WooCommerce 2.6 and 3+
我尝试摆弄其他变体,但所有结果都相同-根本不起作用或使本地取件位置选择框消失。
我需要做的是,如果选择了本地取货(加号),则应该不存在/没有其他运输方式。客户仍然应该能够选择他们喜欢的取件地点。 将我的头发扯在上面,生病了,所以不胜感激!
更新:以下代码集可以正常工作,以在某种程度上禁用统一运费,但仍允许本地取件,包括选择取件位置。
/**
* Hide shipping rates when local pickup is available.
* Updated to support WooCommerce 2.6 Shipping Zones.
*
* @param array $rates Array of rates found for the package.
* @return array
*/
function wc_hide_shipping_when_pickup_is_available( $rates ) {
$pickup = array();
foreach ( $rates as $rate_id => $rate ) {
if ( 'local_pickup_plus' === $rate->method_id ) {
$pickup[ $rate_id ] = $rate;
break;
}
}
return ! empty( $pickup ) ? $pickup : $rates;
}
add_filter( 'woocommerce_package_rates', 'wc_hide_shipping_when_pickup_is_available', 100 );
从此处更改:https://docs.woocommerce.com/document/hide-other-shipping-methods-when-free-shipping-is-available/
function hide_shipping_method_based_on_shipping_class( $rates, $package )
{
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
// HERE define your shipping class to find
$class = 602;
// HERE define the shipping method to hide
$method_key_id = 'flat_rate:1';
// Checking in cart items
foreach( WC()->cart->get_cart() as $cart_item ){
// If we find the shipping class
if( $cart_item['data']->get_shipping_class_id() == $class ){
unset($rates[$method_key_id]); // Remove the targeted method
break; // Stop the loop
}
}
return $rates;
}
add_filter( 'woocommerce_package_rates', 'hide_shipping_method_based_on_shipping_class', 10, 2 );
更改自:Hide shipping method for specific shipping classes in woocommerce
但是我还是说了一点,因为仍然保留了运输2。相反,如果输入了地址,我将得到There are no shipping methods available. Please ensure that your address has been entered correctly, or contact us if you need any help.
,如果尚未输入地址,我将得到Enter your full address to see shipping costs.
。
如果对购物车中的所有物品强制取货,则根本不会出现“运送2”。