【发布时间】:2021-02-01 22:53:14
【问题描述】:
我使用了Business Bloomer snippet 并对其进行了一些调整,以根据购物车中的物品运输类别取消设置一些运输方式。
它适用于我测试过的 4 种运输方式,但为了在我的网站上充分发挥作用,我必须手动列出所有运输方式值,而且我有很多(if 中的 86 和 60 else.)
因此,我想编辑剪辑,以便我可以一次取消设置包含相同术语的所有运输方式,而不是单独查找每个值,但我真的不知道如何。
我有要出售的印刷品,因此我为订单设置了一些运输方式,包括印刷品和一些未订购的订单。因此,我所有的印刷品运输方式的值都以“_print”结尾,而其他方式的值以“_classique”结尾,如下面的代码所示。
我的目标是禁用所有以“_classique”结尾的运输方式,当购物车中有“打印”运输类别的产品时,反之亦然。
到目前为止,我的代码如下所示:
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;
}
任何有关如何实现这一目标的帮助将不胜感激。 感谢任何愿意花时间阅读本文的人!
【问题讨论】:
标签: php wordpress woocommerce cart shipping-method