//Check for specific products then discount to adjust for 'free' shipping.
function my_free_shipping(){
//variables.
global $woocommerce;
$coupon_code = 'free-shiping';
$products= array('1', '2'); //products (ID's) to have discounted shipping.
//get the cart contents.
$cart_item = $woocommerce->cart->get_cart();
//loop through the cart items looking for the products in $products.
foreach ($cart_item as $key => $item){
//check if the cart items match to any of those in the array.
if(in_array($item['product_id'], $products)){
//apply discount.
$woocommerce->cart->add_discount(sanitize_text_field($coupon_code));
}
}
}
add_action('init', 'my_free_shipping');
4条答案
按热度按时间dzhpxtsq1#
我也有同样的问题,插件的作者回答我说,这是不能做到的,一个必须写的代码来做到这一点.
brvekthn2#
我刚刚遇到了这个问题,也许这会帮助一些人摆脱困境。对于所有我想要免费送货的产品,我做了虚拟产品。
然后我去了WooCommerce〉航运选项选项卡,选中框中说“收集航运地址,即使不需要”,这是在“航运目的地部分”。
cbeh67ev3#
我也正是需要这个,并有一个可行的解决方案:
首先在
"Appearance"->"Editor"->"Theme Functions"
中进入您的functions.php
,并添加以下代码(我强烈建议首先使用“child theme“,这样您就不会修改主题的functions.php
...或者您可以选择create a custom plugin)。其次,进入
"Products"->"Shipping Classes"
,创建一个名为“Free Shipping
“的航运类,并创建一个名为“free-shipping
“的slug(slug名称是我们将绑定自定义函数的名称),然后创建“Add New Shipping Class
“。然后在
"WooCommerce"->"Settings"->"Shipping"->"Flat Rate"
中启用“Flat Rate
“shipping,并在“Shipping Class Costs
“部分下,在我们刚刚创建的“Free Shipping
“类旁边放置一个值“0.00
“。在我的例子中,我还将“Calculation Type
“设置为“Per Class
“。然后是“Save changes
“。最后,在
"WooCommerce"->"Settings"->"Shipping"->"Shipping Options"
中的“Shipping Methods
“部分,确保“Flat Rate
“的“Selection Priority
“(在该名称的列中)高于您正在使用的任何其他运输方式,并且它是列表中的最后一个(您可以使用每个选项左侧的菜单图标拖动以重新排序)。“Save Changes
“。然后编辑一个你想要免运费的商品,转到“
Product Data"->"Shipping
“部分,将运费等级更改为“Free Shipping
“(你创建的新等级)。然后“Update
“该商品以保存更改。然后将其添加到你的购物车,并将其他一些有定期非免运费的商品添加到购物车。测试
您现在应该看到免运费商品有自己的运费“包裹”行(“
Shipping #1
“和“Shipping #2
“),与仍应收取运费的商品分开,即使您的购物车中有每种商品中的一些。或者,你也可以尝试全付费插件称为“Per Product Shipping“.
或者这个free plugin may work也是(没有承诺)。
mspsb9vt4#
另一种方法,我相信可能会帮助你使一个项目有“免费”航运(和一种方法,我已经在过去使用),是创建一个优惠券,将折扣的产品(不要标记为“虚拟”),它的价格减去运费。
所以说,例如你的产品是$100和航运是$10(共$110),你然后创建一个优惠券,专门用于产品(s),将给予它$10折扣,使您的产品&航运总额$100.
我想你已经知道如何在woocommerce创建优惠券(如果你需要一些刷新如何这样做this page会有帮助).要使优惠券适用于特定的产品,你想有免费送货,去使用限制-〉产品,并指定特定的产品,你想有“免费”(或在这种情况下,折扣)送货.
为了保存用户在结账时输入优惠券代码的麻烦,您可以在functions.php中添加以下代码:
请注意,我还没有用UPS扩展测试这段代码,但是请随意修改和使用它。
我希望这篇文章对你有帮助!