我试图为WooCommerce编写一个函数,如果购物车中存在具有特定配送类的产品,它将禁用免费配送。
以下是我所拥有的不起作用的东西。E-包是运输类,如果它存在于购物车中,应该禁用免费传送。
function hide_shipping_when_class_is_in_cart( $rates, $package ) {
$shipping_classes = array('e-packet');
$if_exists = false;
foreach( $package['contents'] as $key => $values ) {
if( in_array( $values[ 'data' ]->get_shipping_class(), $shipping_classes ) )
$if_exists = true;
}
if( $if_exists ) unset( $rates['free_shipping:9'] );
return $rates;
}
add_filter( 'woocommerce_package_rates', 'hide_shipping_when_class_is_in_cart', 10, 2 );发布于 2018-03-14 18:04:19
基于相似:Unsetting WooCommerce shipping method based on cart items shipping classes
我做了很小的改变。这段代码是经过测试和工作的(见最后的注释)
add_filter( 'woocommerce_package_rates', 'hide_shipping_when_class_is_in_cart', 100, 2 );
function hide_shipping_when_class_is_in_cart( $rates, $package ) {
// Initialisation
$free_shipping_method = 'free_shipping:9';
$shipping_classes = array('e-packet');
$class_exists = false;
foreach( $package['contents'] as $cart_item )
if( in_array( $cart_item['data']->get_shipping_class(), $shipping_classes ) ) {
$class_exists = true;
break; // Stop the loop
}
if( $class_exists )
unset( $rates[$free_shipping_method] );
return $rates;
}代码在您的活动子主题(或活动主题)的function.php文件中。
您应该需要刷新传送缓存: 1)首先,这段代码已经保存在function.php文件中。 2)在“传送”设置中,输入“传送区域”并禁用传送方法和“保存”。然后重新启用传送方法和“保存”。你完了。
https://stackoverflow.com/questions/49284009
复制相似问题