我网站上的产品由以下两个运输插件之一处理:Printful Integration for WooCommerce和Printify for WooCommerce Shipping。每个运输插件中有混合物品时。当有(冲突和问题)混合项目时,这些插件会将装运包裹一分为二。
因此,我为产品添加了运输类别 'printful'
(其ID为 548
)由Printful plugin处理,并尝试通过@LoicTheAzec(欢呼声)调整Hide shipping method for specific shipping classes in woocommerce答案代码,以仅由于ID之间的冲突而从ID为2和3的特定重复运输包装中删除运输方法运输插件...
这是我的实际代码:
add_filter( 'woocommerce_package_rates', 'hide_shipping_method_based_on_shipping_class', 10, 2 );
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 = 548; //CAMDEN HARBOR CHART MUG is in shipping class
// HERE define the shipping methods you want to hide
$method_key_ids = array('printify_shipping_s', 'printify_shipping_e');
// 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 ){
foreach( $method_key_ids as $method_key_id ){
unset($rates[$method_key_id]); // Remove the targeted methods
}
break; // Stop the loop
}
}
return $rates;
}
但是它不起作用,我仍然得到4个运输包装,而不是2个:
感谢您的帮助。
答案 0 :(得分:1)
这里的问题与当购物车中有混合物品时,拆分两个运输插件之间的包裹冲突有关。在这种情况下,每个插件都会拆分运输包装,添加4个拆分包装,而不是2个。
这些插件正在使用woocommerce_cart_shipping_packages
来分割优先级为(so I will set a very high priority)
的运输包裹。
以下代码将保留购物车中的前两个拆分包(也包括结帐):
add_filter( 'woocommerce_cart_shipping_packages', 'remove_split_packages_based_on_items_shipping_class', 100000, 1 );
function remove_split_packages_based_on_items_shipping_class( $packages ) {
$has_printful = $has_printify = false; // Initializing
// Lopp through cart items
foreach( WC()->cart->get_cart() as $item ){
// Check items for shipping class "printful"
if( $item['data']->get_shipping_class() === 'printful' ){
$has_printful = true;
} else {
$has_printify = true;
}
}
// When cart items are mixed (using both shipping plugins)
if( $has_printful && $has_printify ){
// Loop through split shipping packages
foreach( $packages as $key => $package ) {
// Keeping only the 2 first split shipping packages
if( $key >= 2 ){
// Removing other split shipping packages
unset($packages[$key]);
}
}
}
return $packages;
}
代码进入您的活动子主题(活动主题)的function.php文件中。混合购物车物品时,它应该可以工作并仅显示两个运输包裹。