我目前正在建立一家woocommerce驱动的商店。
我使用fedex shipping calc.扩展来计算运费。
我想免费运送所有低于200美元的物品。不管购物车的总金额是否超过200美元。意味着您可以添加4或6件物品,如果每件物品的价格低于200美元,则无需考虑购物车中的物品数量。
所以,我所做的是,我将所有(低于200美元)项目设置为“虚拟”项目。这样他们就跳过了联邦快递的运费计算。
问题是,我还想提供本地取货作为一种运输选择。但是,如果客户的购物车中只有虚拟物品,则无法选择该选项。
是否有办法启用本地取货选项?
还是有更聪明的解决方案来实现这个想法?
编辑:
我还尝试了以下几点:
我创建了一个特殊的航运类,名为“免费航运”。
我已经为其中一个价格低于200美元的项目禁用了“虚拟”选项。我在那件商品上加了“特级”免费送货。
然后,我启动了统一费率的运费方法,并将运费设置为0.00
我将该选项从固定费率重命名为免费送货,以便在结账页面上显示为免费送货
到目前为止还不错,现在如果我将该项目添加到购物篮中,我会看到两个选项:免费送货(我已重命名的原始统一费率)和“本地提货”选项。
到目前为止,一切都很好。这很好。。。
问题是,只要我向购物车中添加另一个价格超过200美元的商品,联邦快递就会生效,并将计算运费,并显示一些联邦快递选项。
我也看到了本地提货,但这也是问题所在,我也看到了免费送货选项,因为我给的特殊类别的物品仍然在篮子里。
意味着人们可以选择免费送货,这不是我要找的。只要篮子里有一件价格超过200美元的商品,免费送货就应该取消了。
我在WPA上发现以下截图
以下是一些GIST从GitHub问题讨论中收集的片段,另一个答案中由@Ewout链接。我添加了一个var\\u dump(),因此您可以取消注释并检查要删除的内容。
$available_methods is an array of:
$available_methods as $method_id => $method
Compare against $method_id if you need more specific checks.
// Hide standard shipping option when free shipping is available
add_filter( \'woocommerce_available_shipping_methods\', \'wpse90835_hide_standard_shipping_when_free_is_available\' );
/**
* Hide Standard Shipping option when free shipping is available
*
* @param array $available_methods
*/
function wpse90835_hide_standard_shipping_when_free_is_available($available_methods )
{
// Developers!: Dump this to see what you can unset
# var_dump( $available_methods );
// remove standard shipping option
if (
isset( $available_methods[\'free_shipping\'] )
AND isset( $available_methods[\'flat_rate\'] )
)
unset( $available_methods[\'flat_rate\'] );
return $available_methods;
}
有人能告诉我如何使用“如果需要更具体的检查,请与$method\\u id进行比较”