Woocommerce - 使用UPS扩展时为单件商品创建免费送货

时间:2013-03-17 03:05:42

标签: woocommerce shipping ups

我在woocommerce中使用UPS扩展程序。我需要绕过UPS计算器免费送货。这样做的一个好方法是将项目标记为“virtuaL”,但该项目不需要运送。我需要为此商品发货。我已经能够自定义结帐页面并强制在虚拟物品上显示送货字段,但之后它们不会存储在实际订单中。

任何人都知道如何创建自定义功能或修改woocommerce文件以强制结帐流程要求在虚拟物品上运送,同时绕过UPS计算器? (其他项目需要计算运费)

4 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,插件的作者回答我说无法完成,必须编写代码才能完成。

答案 1 :(得分:0)

我刚遇到这个问题,也许这会帮助别人。对于我想要免费送货的所有产品,我制作了虚拟产品。

然后我去了Woocommerce> “运输选项”选项卡,选中“#34;即使不需要也可以收集送货地址”框。它位于"送货目的地部分"。

答案 2 :(得分:0)

我也需要这个,并且有一个可行的解决方案:

首先进入functions.php中的"Appearance"->"Editor"->"Theme Functions",然后添加以下代码(我强烈建议首先使用" child theme"因此您不需要修改你的主题functions.php ......或者你也可以create a custom plugin)。

/* Puts items with "free-shipping" shipping class into a different shipping package. */

    function free_woocommerce_cart_shipping_packages( $packages ) {

        // Reset the packages
        $packages = array();

        // Free items
        $freeshipping_items = array();
        $regular_items      = array();

        // Sort free from regular (replace "free-shipping" below with the shipping class slug you actually use).
        foreach( WC()->cart->get_cart() as $item ) {
            if( $item['data']->needs_shipping() ) {
                if( $item['data']->get_shipping_class() == 'free-shipping' ) {
                    $freeshipping_items[] = $item;
                }
                else {
                    $regular_items[] = $item;
                }
            }
        }

        // Put inside packages:
        if( $freeshipping_items ) {
            $packages[] = array(
                'ship_via'        => array( 'flat_rate' ),
                'contents'        => $freeshipping_items,
                'contents_cost'   => array_sum(wp_list_pluck($freeshipping_items, 'line_total')),
                'applied_coupons' => WC()->cart->applied_coupons,
                'destination'     => array(
                    'country'   => WC()->customer->get_shipping_country(),
                    'state'     => WC()->customer->get_shipping_state(),
                    'postcode'  => WC()->customer->get_shipping_postcode(),
                    'city'      => WC()->customer->get_shipping_city(),
                    'address'   => WC()->customer->get_shipping_address(),
                    'address_2' => WC()->customer->get_shipping_address_2()
                )
            );
        }
        if( $regular_items ) {
            $packages[] = array(
             // 'ship_via'        => array( 'usps' ),
                'contents'        => $regular_items,
                'contents_cost'   => array_sum(wp_list_pluck($regular_items, 'line_total')),
                'applied_coupons' => WC()->cart->applied_coupons,
                'destination'     => array(
                    'country'   => WC()->customer->get_shipping_country(),
                    'state'     => WC()->customer->get_shipping_state(),
                    'postcode'  => WC()->customer->get_shipping_postcode(),
                    'city'      => WC()->customer->get_shipping_city(),
                    'address'   => WC()->customer->get_shipping_address(),
                    'address_2' => WC()->customer->get_shipping_address_2()
                )
            );
        }

        return $packages;
    }

    add_filter('woocommerce_cart_shipping_packages', 'free_woocommerce_cart_shipping_packages');

其次,进入"Products"->"Shipping Classes"并创建一个名为" Free Shipping"用一个名为" free-shipping" (slug名称是我们将自定义函数绑定到的)。然后" Add New Shipping Class"。

然后在"WooCommerce"->"Settings"->"Shipping"->"Flat Rate"启用" Flat Rate"运送,并在" Shipping Class Costs"部分的值为" 0.00"在" Free Shipping"旁边我们刚创建的课程。在我的情况下,我也有" Calculation Type"设置为" Per Class"。然后" Save changes"。

最后在&{34; "WooCommerce"->"Settings"->"Shipping"->"Shipping Options"" Shipping MethodsFlat Rate部分,确保" Selection Priority"有一个更高的" Save Changes" (在该名称的列中)比您正在使用的任何其他运输方法,并且它是列表中的最后一个(您可以使用每个选项左侧的菜单图标拖动以重新排序)。 " Product Data"->"Shipping"

然后编辑您希望免费送货的某件商品,转到" Free Shipping"部分并将运输类更改为" Update" (您创建的新课程)。然后" Shipping #1"该产品保存更改。然后还将其添加到您的购物车中,并将其他商品添加到您的购物车中,该商品定期非免费送货。

<强>测试

您现在应该看到免费送货物品可以自己运送&#34;包裹&#34;行(&#34; Shipping #2&#34;和&#34; {{1}}&#34;)与仍应收取运费的商品分开,即使您有各种类型的商品购物车。

或者,您也可以尝试使用名为&#34; Per Product Shipping&#34;的完整付费插件。

或者这个free plugin may work(没有承诺)。

答案 3 :(得分:0)

我认为另一种可以帮助你制作物品的方式是免费的#34;运费(以及我过去使用过的一种方式),就是创建一个优惠券来折扣产品(不要将其标记为&#34;虚拟&#34;)它的价格减去运费。

所以说例如你的产品是100美元,运费是10美元(总共110美元),然后你创建一个专门针对产品的优惠券,它将给你10美元的折扣,使你的产品和产品成为可能。运费总计100美元。

我假设你已经知道如何在woocommerce中创建优惠券(如果你需要一些令人耳目一新的方法{@ 3}}会有所帮助)。要使优惠券适用于您希望免费送货的特定产品,请转到使用限制 - &gt;产品并指定您想要的特定产品&#34;免费&#34; (或在这种情况下,打折)运费。

为了避免用户在结账时输入此优惠券代码,您可以将以下代码添加到functions.php中:

//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');   

请注意,我已经使用UPS扩展程序未测试此代码,但您可以随意修改并使用它。

我希望这篇文章对您有所帮助!