问题描述
在WooCommerce中,我使用 回答代码(第二种方式),但问题是我使用的WPML插件可以管理2种语言的网站,因此只查找一个类是不会做的。
In WooCommerce, I am hiding shipping methods based on different shipping classes in cart using "Hide shipping methods for specific shipping class in WooCommerce" answer code (the 2nd way), but the problem is that I use WPML plugin which manage 2 languages site, so looking for just one class won't do it.
所以我需要处理2个运输类而不是一个。我以这种方式尝试了addind 2航运类别:
So I need to handle 2 shipping classes instead of one. I tried addind 2 shipping classes this way:
// HERE define your shipping classes to find
$class = 3031, 3032;
但是它破坏了网站。因此,我不仅要隐藏 3031
和 3032两种运输类别的已定义统一费率, code>
。
But it breaks the website. So I would like to hide the defined flat rate not only for both shipping classes 3031
and 3032
.
我在做什么错?如何在不破坏网站的情况下启用2个运输类?
What I am doing wrong? How can I enable 2 shipping classes without breaking the web site?
推荐答案
要使用多个运输类,应首先在中定义它们一个数组,并在 IF
语句中,您将使用 in_array()
条件函数:
To use multiple shipping classes, you should first defined them in an array and in the IF
statement you will use in_array()
conditional function this way:
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 classes to find
$classes = [3031, 3032];
// HERE define the shipping methods you want to hide
$method_key_ids = array('flat_rate:189');
// Checking in cart items
foreach( $package['contents'] as $item ) {
// If we find one of the shipping classes
if( in_array( $item['data']->get_shipping_class_id(), $classes ) ){
foreach( $method_key_ids as $method_key_id ){
unset($rates[$method_key_id]); // Remove the targeted methods
}
break; // Stop the loop
}
}
return $rates;
}
代码在您的活动子主题(或活动主题)的functions.php文件中)。经过测试并可以正常工作。
Code goes in functions.php file of your active child theme (or active theme). Tested and works.
相关主题:
这篇关于隐藏WooCommerce中特定运输类别的运输方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!