【发布时间】:2020-08-19 20:53:57
【问题描述】:
这是场景:
我使用 UPS 运送饮料托盘。然而,将 5 盘饮料装入盒子变得非常困难。因此,我想禁用 UPS 运输方式,并且仅在客户订购 5 盘或更多托盘饮料时才显示统一运费。我有大约 7 种不同的饮料,但我可以将这些饮料添加到运输类中以简化代码。
我想扩展此代码以包含特定类别中的产品数量,或者可能包含运输类别中的产品出现的次数。因此,如果购物车中有 5 个或更多属于该特定运输类别的产品,它应该删除我在数组下指定的运输方式。
如何扩展此代码以包括产品数量?
//如果我们发现shipping class &数量的产品在shipping class中等于或大于5。
add_filter( 'woocommerce_package_rates', 'hide_shipping_method_based_on_shipping_class', 10, 2 );
function hide_shipping_method_based_on_shipping_class( $rates, $package )
{
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
// Shipping Class To Find
$class = 182;
// Number Of Shipping Class Items In Cart
$amount = 5;
// Shipping Methods To Hide
$method_key_ids = array('wf_shipping_ups:07', 'wf_shipping_ups:08', 'wf_shipping_ups:11', 'wf_shipping_ups:54', 'wf_shipping_ups:65', 'wf_shipping_ups:70', 'wf_shipping_ups:74', 'free_shipping:2', 'request_shipping_quote');
// Checking In Cart Items
foreach( $package['contents'] as $item ) {
// If We Find The Shipping Class and Number of Items
if( $item['data']->get_shipping_class_id() == $class && count($package['contents']) >= $amount ){
foreach( $method_key_ids as $method_key_id ){
unset($rates[$method_key_id]); // Remove Targeted Methods
}
break; // Stop The Loop
}
}
return $rates;
}
编辑 - 添加:
由于我从 PluginHive 购买了“带有打印标签的 WooCommerce UPS 运输插件”,因此我可以访问他们的“管理运输方式”插件,该插件允许我执行以下操作:
设置多个规则以从各种运输类别中排除各种运输方式。 在第一次出现时打破顺序。
我设置的规则如下:
- 对于 150 类(第一次出现中断)- 未设置:
wf_shipping_ups:07, wf_shipping_ups:08, wf_shipping_ups:11, wf_shipping_ups:54, wf_shipping_ups:65, wf_shipping_ups:70, wf_shipping_ups:74, 免费送货:2, request_shipping_quote。
- 对于 151 类 - 未设置: flat_rate:20, flat_rate:21。
我在上面的代码中为我想要定位的产品创建了第三类 182。只有当少于 5 个该类别的商品添加到购物车时,它才应被视为 151 类别。
但如果购物车中添加了 5 件或更多商品,则应视为 150 类。
这是我的两难选择。
潜在解决方案 - 补充:
我想出了如何解决我的问题。如果购物车中的产品数量为 5 或更多,代码 @LoicTheAztec 帮助我取消设置给定运输类别的运输方式。
我现在需要做的是取消设置导致冲突的其他两种运输方式(flat_rate:20 和 flat_rate:21),用于相同的运输类别 (182),但这次是购物车中的产品数量为 4或更少 (=
然后我可以使用现有的插件创建以下规则:
在第一次出现时中断(检查)
- 对于 150 类 - 未设置:
wf_shipping_ups:07, wf_shipping_ups:08, wf_shipping_ups:11, wf_shipping_ups:54, wf_shipping_ups:65, wf_shipping_ups:70, wf_shipping_ups:74, 免费送货:2, request_shipping_quote。
- 对于 182 类 - 未设置:
什么都没有 - 因为两个代码都会创建逻辑
- 对于 151 类 - 未设置:
flat_rate:20, flat_rate:21。
这应该可以解决插件引起的冲突。
百万美元的问题是……我能以某种方式使用@LoicTheAztec 的解决方案来设置某种最小数量吗?
【问题讨论】:
-
你已经写了什么代码了?请阅读this guide on producing code for a good quality question,然后在您的问题中包含并标记您的代码。干杯!
-
刚刚更新了代码。这是我目前正在为不同的运输等级运行的,它工作正常。但我不确定如何为我创建的新运输类别添加数量。
-
@LoicTheAztec 我已经更新了代码,但还没有在登台上进行测试。以为我会让你知道。
-
@Joundill 我已经更新了代码,但还没有在登台上进行测试。以为我会让你知道。
-
@Joundill AS OP 在他的问题中提供了相关代码,如果您愿意,可以删除反对票并关闭。
标签: php wordpress woocommerce shipping-method product-quantity