我正在使用WooCommerce的WordPress网站上工作。我发现了这段代码,允许我根据重量设置运费选项。它工作得很好,直到客户也想要相同的运费选项,如果在产品上选择了运费运输类。
add_filter( 'woocommerce_package_rates', 'bbloomer_woocommerce_tiered_shipping', 10, 2 );
function bbloomer_woocommerce_tiered_shipping( $rates, $package ) {
if ( WC()->cart->cart_contents_weight < 300 ) {
if ( isset( $rates['fedex:PRIORITY_OVERNIGHT'], $rates['fedex:FEDEX_2_DAY'], $rates['fedex:FEDEX_GROUND'] ) );
} else {
if ( isset( $rates['flat_rate:10'] ) ) unset( $rates['fedex:PRIORITY_OVERNIGHT'], $rates['fedex:FEDEX_2_DAY'],$rates['fedex:FEDEX_GROUND'] );
}
return $rates;
}
然后我发现了另一段代码,可以设置一个航运类航运选项。我发现的代码是指unset
航运选项是可用的,但我想isset
货运航运,因为我们unset
它通过推车重量。然而,我遇到了一个问题,货运类不能再设置为isset
而不会造成重大问题。下面是我试图为货运做的事情。
add_filter( 'woocommerce_package_rates', 'freight_shipping_class_only', 10, 2 );
function freight_shipping_class_only( $rates, $package ) {
$shipping_class_target = 193;
$in_cart = false;
foreach( WC()->cart->cart_contents as $key => $values ) {
if( $values[ 'data' ]->get_shipping_class_id() == $shipping_class_target ) {
$in_cart = true;
break;
}
}
if( $in_cart ) {
unset( $rates['fedex:PRIORITY_OVERNIGHT'], $rates['fedex:FEDEX_2_DAY'],$rates['fedex:FEDEX_GROUND'] ); // shipping method with ID (to find it, see screenshot below)
isset( $rates['flat_rate:10'] );
}
return $rates;
}
有没有办法在一个函数中设置推车重量和货运类别?这将是理想的,因为我希望他们都做完全相同的事情,由unset
所有联邦快递航运选项和isset
货运航运选项。
如果你需要我说得更清楚或者有什么建议就告诉我。
谢谢!
2条答案
按热度按时间omqzjyyz1#
当你使用2次相同的钩子时,你可以简单地把你的函数合并成一个。
现在在php
[isset()][1]
中你需要在IF
语句中使用它作为一个条件来检查一个变量是否被设置(存在),但是它在函数中的IF语句之外没有任何作用。因此,在第一个函数中,以下内容不起任何作用:
因此,您可以尝试以下紧凑而高效的代码:
代码进入活动子主题(或活动主题)的function.php文件。它应该工作。
mzsu5hc02#
我找到了一个解决方案,这并不是我想要的,但它的工作。我所做的是改变推车重量超过300磅
unset
联邦快递航运选项。然后unset
联邦快递航运选项的货运类。这仍然留下货运航运选项可见的非货运项目,我用CSS隐藏。我仍然对更好的方法持开放态度。所以如果你有建议,请把它们寄给我。
下面是我最后做的。