问题描述
我使用了Business Bloomer snippet并对其进行了一些微调,以根据购物车中物品的运输类别来取消某些运输方式。
它可以与我测试过的4种运输方式配合使用,但是为了能在我的网站上正常工作,我必须手动列出所有运输方式值,并且有很多(在if
中未设置86 {{1}中的60。)
因此,我想编辑摘录,以便可以一次取消设置所有包含相同术语的所有送货方式,而不必分别查找每个值,但我真的不知道该怎么做。
我有要出售的印刷品,因此我为订单设置了一些运输方式,包括印刷品,另一些为定货。因此,如下面的代码所示,我所有的打印方式都以“ _print”结尾,而其他方式都以“ _classique”结尾。
我的目标是在购物车中具有“打印”运输类别的产品时禁用所有以“ _classique”结尾的运输方式,反之亦然。
到目前为止,我的代码如下:
else
在实现此目标方面的任何帮助将不胜感激。 谢谢那些花时间阅读本文的人!
解决方法
已更新
使用PHP strpos()
将使您检查字符串中是否包含单词。然后,您需要对代码进行一些更改才能使其正常工作:
add_filter( 'woocommerce_package_rates','show_hide_shipping_methods',10,2 );
function show_hide_shipping_methods( $rates,$package ) {
$shipping_class_id = 35; // Targeted shipping class ID
$found = false;
// Loop through cart items for the current package
foreach ( $package['contents'] as $cart_item ) {
if( $cart_item['data']->get_shipping_class_id() == $shipping_class_id ) {
$found = true;
break;
}
}
// Loop through shipping rates
foreach ( $rates as $rate_key => $rate ) {
if ( $found && strpos($rate_key,'_classique') !== false ) {
unset($rates[$rate_key]);
}
elseif (! $found && strpos($rate_key,'_print') !== false ) {
unset($rates[$rate_key]);
}
}
return $rates;
}
代码进入活动子主题(或活动主题)的functions.php文件中。应该可以。
清除运输缓存:
- 您将需要清空购物车,以清除缓存的运输数据
- 或者在运输设置中,您可以禁用/保存任何运输方式,然后启用回退/保存。
相关: