【发布时间】:2019-01-01 05:58:02
【问题描述】:
我正在开发一个使用 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 所有 FedEx 运输选项和 isset 货运选项做完全相同的事情。
如果您需要我说得更清楚,或者您有任何提示,请告诉我。
谢谢!
【问题讨论】:
-
我已经在这里回答了,因为您可以真正简化并将您的代码合并到一个独特的功能中......请看一下,您的反馈将不胜感激。
标签: php wordpress woocommerce shipping isset