如何添加已删除的装运方法或覆盖它';在Woocommerce中针对特定条件的方法设置?
我排除了免费送货的虚拟产品,工作代码如下。然而,“灵活装运”和“灵活装运”的费率是有问题的,因为当超过免费装运阈值时,它们就会被删除 例如,一个用户购买价值20美元的虚拟产品和价值26美元的其他产品,这使得订单总额为46美元,这将使他们有资格获得免费送货。因为他们有资格免费送货,所以其他价格都被取消了 下面的代码检查,看看非虚拟总额实际上只有26美元,所以他们不应该得到免费送货。他们有资格享受26-44.99美元的价格。这部分工作正常 如果取消免费配送,他们应该获得下一层配送:ID=flexible\u shipping\u 12\u 2。此方法已删除自身,因为它认为订单总额为46美元 我需要“重新插入”,而不是创建,该方法和#_12_1插入到下面代码中指定的可用装运方法中 我不知道如何重新插入装运方法:如何添加已删除的装运方法或覆盖它';在Woocommerce中针对特定条件的方法设置?,woocommerce,shipping-method,Woocommerce,Shipping Method,我排除了免费送货的虚拟产品,工作代码如下。然而,“灵活装运”和“灵活装运”的费率是有问题的,因为当超过免费装运阈值时,它们就会被删除 例如,一个用户购买价值20美元的虚拟产品和价值26美元的其他产品,这使得订单总额为46美元,这将使他们有资格获得免费送货。因为他们有资格免费送货,所以其他价格都被取消了 下面的代码检查,看看非虚拟总额实际上只有26美元,所以他们不应该得到免费送货。他们有资格享受26-44.99美元的价格。这部分工作正常 如果取消免费配送,他们应该获得下一层配送:ID=flexib
//Exclude virtual products from free shipping
add_filter('woocommerce_package_rates', 'custom_shipping_option', 20, 2 );
function custom_shipping_option($rates, $package){
$non_virtual_total = 0;
// Get the cart content total excluding virtual products
foreach( WC()->cart->get_cart() as $cart_item )
if( ! $cart_item['data']->is_virtual( ) ){
$non_virtual_total += $cart_item['line_total'];
}
// Disabling methods based on non_virtual_total
if( $non_virtual_total < 45 && $non_virtual_total >= 25 ){
foreach ( $rates as $rate_key => $rate )
if( 'free_shipping' == $rate->method_id )
unset( $rates[ $rate_key ] );
if( 'flexible_shipping_12_1' == $rate->method_id )
unset( $rates[ $rate_key ] );
//insert flexible_shipping_12_2 method here
}
if( $non_virtual_total < 25 ){
foreach ( $rates as $rate_key => $rate )
if( 'free_shipping' == $rate->method_id )
unset( $rates[ $rate_key ] );
if( 'flexible_shipping_12_2' == $rate->method_id )
unset( $rates[ $rate_key ] );
//insert flexible_shipping_12_1 method here
}
return $rates;
//从免费送货中排除虚拟产品
添加过滤器('woocommerce\u package\u rates','custom\u shipping\u option',20,2);
功能自定义装运选项($rates$package){
$non_virtual_总计=0;
//获取购物车内容总数(不包括虚拟产品)
foreach(WC()->cart->get_cart()作为$cart_项目)
如果(!$cart\u项目['data']->是虚拟的()){
$non_virtual_total+=$cart_item['line_total'];
}
//基于非虚拟总体的禁用方法
如果($non_virtual_total<45&$non_virtual_total>=25){
foreach($rate作为$rate\u key=>$rate的费率)
如果('free_shipping'=$rate->method_id)
未设置($rates[$rate_key]);
如果('flexible_shipping_12_1'==$rate->method_id)
未设置($rates[$rate_key]);
//在此处插入灵活的装运方法
}
如果($non_virtual_total<25){
foreach($rate作为$rate\u key=>$rate的费率)
如果('free_shipping'=$rate->method_id)
未设置($rates[$rate_key]);
如果('flexible_shipping_12_2'==$rate->method_id)
未设置($rates[$rate_key]);
//在此处插入灵活的装运方法
}
返回美元汇率;
}我相信您只是想将
灵活装运\u 12\u 1
或灵活装运\u 12\u 2
装运方法重新添加到$rates
数组中,对吗
这应该是您所需要的全部:
//insert flexible_shipping_12_1 method here
array_push($rates, "flexible_shipping_12_1");
//insert flexible_shipping_12_2 method here
array_push($rates, "flexible_shipping_12_2");
array\u push
方法只是将新值添加到数组中。这导致了一个错误:致命错误:未捕获错误:调用/home/dev/staging/1/wp content/plugins/woocommerce/includes/wc cart functions.php中字符串上的成员函数get\u label()。php:345似乎不相关-get\u label不在您的代码或我的解决方案中。希望这意味着代码现在可以像预期的那样工作,它只是发现了另一个bug