在 Woocommerce 中为两个或更多购物车商品启用免费送货

Enable free shipping for two or more cart items in Woocommerce

在 Woocommerce 中,我想根据购物车商品的数量提供免费送货服务。首先,我开始查看可用的插件,但找不到任何基于数量的简单解决方案。

我只想:买任何东西 2 件即可免费送货。

瞎折腾,我试了下面的代码:

function free_ship( $is_available ) {
    $count = 0;
    global $woocommerce;
    $items = $woocommerce->cart->get_cart();
    foreach($items as $item) {
        $count++;
    }
    echo $count;

    if ( $count == 1 ) {
        echo 'add one more for free shipping';
        return $is_available;
    } elseif ($count > 1) {
        echo 'you get free shipping';
        return false;
    } else {
        echo 'nothing in your cart';
        return $is_available;
    }
}
add_filter( 'woocommerce_shipping_free_shipping_is_available', 'free_ship' );

但是在将商品添加到购物车时挂起。从购物车中取出东西时,它也有问题。我想在 PHP 中解决这个问题,以便我可以进一步添加更多独特的条件,因为它们在未来会突然出现。

有什么建议吗?

你的代码中有一些错误,比如缺少参数、复杂化和过时的东西……试试下面的方法:

add_filter( 'woocommerce_shipping_free_shipping_is_available', 'free_shipping_for_x_cart_items', 10, 3 );
function free_shipping_for_x_cart_items( $is_available, $package, $shipping_method ) {
    $item_count = WC()->cart->get_cart_contents_count();

    if ( $item_count == 1 ) {
        $notice = __("Add one more for free shipping");
        $is_available = false;
    } elseif ($item_count > 1) {
        $notice = __("You get free shipping");
        $is_available = true;
    }

    if ( isset($notice) ) {
        wc_add_notice( $notice, 'notice' );
    }
    return $is_available;
}

此代码位于您的活动子主题(或活动主题)的 function.php 文件中。已测试并有效。


WC_Cart方法get_cart_contents_count()获取所有项目的数量(包括数量)

要获取不同购物车商品的数量(不包括数量),请替换行:

$item_count = WC()->cart->get_cart_contents_count();

这个:

$item_count = sizeof($package['contents']);