我使用了一个Business Bloomer片段,并对其进行了一点调整,以根据购物车中项目的运输类别取消一些运输方法。
它适用于我测试过的4种配送方式,但为了在我的网站上充分发挥作用,我必须手动列出所有配送方式的值,我有很多(如果<代码>中有86个要取消设置,如果<代码>中有60个要取消设置,否则<代码>中有60个要取消设置)
因此,我想编辑剪报,这样我就可以一次性取消设置包含相同术语的所有装运方法,而不是逐个查找每个值,但实际上不知道如何进行。
我有印刷品出售,所以我为订单设置了一些运输方式,包括印刷品和一些不带印刷品的订单。因此,我所有的打印发货方法都有一个以“_print”结尾的值,而其他的方法都有一个以“_classique”结尾的值,如下面的代码所示。
我的目标是禁用所有以“_classique”结尾的装运方法,当产品在购物车中具有“print”装运类时,反之亦然。
到目前为止,我的代码如下所示:
add_filter( 'woocommerce_package_rates', 'businessbloomer_hide_regular_shipping_method', 10, 2 );
function businessbloomer_hide_regular_shipping_method( $rates, $package ) {
$shipping_class_target = 35; // shipping class ID
$in_cart = false;
foreach( WC()->cart->get_cart_contents() as $key => $values ) {
if( $values[ 'data' ]->get_shipping_class_id() == $shipping_class_target ) {
$in_cart = true;
break;
}
}
if( $in_cart ) { // shipping method with value
unset( $rates['wbs:2:d6f790a0_colissimo_sans_signature_classique'] );
unset( $rates['wbs:2:d748dcd4_lettre_suivie_classique'] );
unset( $rates['wbs:2:f1058bc8_colissimo_avec_signature_classique'] );
}
else{
unset( $rates['wbs:2:1cdf4913_colissimo_sans_signature_print'] );
unset( $rates['wbs:2:fghla482_lettre_suivie_print'] );
unset( $rates['wbs:2:g27a1f56_colissimo_avec_signature_print'] );
}
return $rates;
}
任何关于如何实现这一目标的帮助都将不胜感激。感谢任何愿意花时间阅读这篇文章的人!
更新
使用PHPstrpos()
可以检查字符串中是否包含单词。然后,您需要对代码进行一些更改以使其正常工作:
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;
}
代码进入函数。活动子主题(或活动主题)的php文件。它应该有效。
清理运输缓存:
相关的: