如何在 WooCommerce 中根據數量提供折扣

已發表: 2020-01-27

通常,作為店主,如果客戶購買超過一個數量的特定產品,您有時可能希望提供折扣。 這可能是為了促進銷售或完成多餘的庫存。 在這篇文章中,您將學習如何使用代碼片段和插件在 WooCommerce 中根據數量提供折扣。

如何使用代碼片段在 WooCommerce 中根據數量提供折扣

讓我們探索如何使用代碼片段來執行此操作。 使用此代碼段,如果客戶購買超過 2 個數量的相同產品,我們將為他們提供 5% 的折扣。

為此,您需要將以下代碼添加到子主題的 functions.php 文件中:

 add_filter('woocommerce_add_cart_item_data', 'ts_add_default_price_as_custom', 20, 3 );

功能 ts_add_default_price_as_custom( $cart_item_data, $product_id, $variation_id ){

    $product_id = $variation_id > 0 ? $variation_id : $product_id;

    ## ----- 在這裡設置折扣 ----- ##
    $discount_percentage = 5; // 折扣 (5%)

    // WC_Product 對象
    $product = wc_get_product($product_id);

    $price = (float) $product->get_price();

    // 將產品默認基價設置為自定義購物車商品數據
    $cart_item_data['base_price'] = $price;

    // 將產品折扣價設置為自定義購物車商品數據
    $cart_item_data['new_price'] = $price * (100 - $discount_percentage) / 100;

    // 將百分比設置為自定義購物車商品數據
    $cart_item_data['percentage'] = $discount_percentage;

    返回 $cart_item_data;
}

// 顯示產品原價
add_filter('woocommerce_cart_item_price', 'ts_display_cart_items_default_price', 20, 3);

功能 ts_display_cart_items_default_price($product_price, $cart_item, $cart_item_key){
    if( isset($cart_item['base_price']) ) {
        $product = $cart_item['data'];
        $product_price = wc_price( wc_get_price_to_display( $product, array( 'price' => $cart_item['base_price'] ) ) );
    }
    返回 $product_price;
}

// 顯示帶有折扣百分比的產品名稱
add_filter('woocommerce_cart_item_name', 'ts_add_percentage_to_item_name', 20, 3);
函數 ts_add_percentage_to_item_name( $product_name, $cart_item, $cart_item_key ){
    if( isset($cart_item['percentage']) && isset($cart_item['base_price']) ) {
        if( $cart_item['data']->get_price() != $cart_item['base_price'] )
            $product_name .= ' <em>(' . $cart_item['percentage'] . '% discounted)</em>';
    }
    返回 $product_name;
}

add_action('woocommerce_before_calculate_totals', 'ts_custom_discounted_cart_item_price', 20, 1);
功能 ts_custom_discounted_cart_item_price($cart) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        返回;

    if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
        返回;

    ## ----- 在此處設置數量 ----- ##
    $targeted_qty = 2; // 目標數量

    // 遍歷購物車項目
    foreach ( $cart->get_cart() as $cart_item ) {

        // 對於 2 個或更多的項目數量
        if($cart_item['quantity'] >= $targeted_qty && isset($cart_item['new_price']) ){

            // 設置購物車商品折扣價
            $cart_item['data']->set_price($cart_item['new_price']);
        }
    }
}

如果產品的數量超過 2,上面的代碼將添加 5% 的折扣。您可以通過更改$discount_percentage變量來設置所需的折扣和$targeted_qty來設置數量,從而滿足您的要求。您希望應用折扣。

offer discounts based on quantity in WooCommerce - Updated Cart contents

如果您在購物車中添加 2 個或更多數量的相同產品,您現在將能夠看到折扣價。

我們在上面的代碼中使用了四個主要的鉤子:

woocommerce_add_cart_item_data :此過濾器掛鉤用於更改購物車的內容/元數據。
woocommerce_cart_item_price :此過濾器掛鉤用於更改價格在購物車中的顯示方式。
woocommerce_cart_item_name :此過濾器掛鉤可用於更改購物車中的產品名稱。 在我們的示例中,我們使用它將折扣百分比附加到產品名稱中。
woocommerce_before_calculate_totals :此操作掛鉤用於覆蓋購物車中的產品價格。

如何僅針對非特價商品提供基於數量的折扣:

如果您想將其限制為僅那些不銷售的產品,您只需編輯上面的代碼片段以在添加到鉤子woocommerce_add_cart_item_data 的函數內添加一個條件:

 add_filter('woocommerce_add_cart_item_data', 'ts_add_default_price_as_custom', 20, 3 );
功能 ts_add_default_price_as_custom( $cart_item_data, $product_id, $variation_id ){
    $product_id = $variation_id > 0 ? $variation_id : $product_id;

    ## ----- 在這裡設置折扣 ----- ##
    $discount_percentage = 5; // 折扣 (5%)

    // WC_Product 對象
    $product = wc_get_product($product_id);

    // 在此處添加條件以僅針對非在售產品提供折扣
    如果(!$product->is_on_sale()){
        $price = (float) $product->get_price();

        // 將產品默認基價設置為自定義購物車商品數據
        $cart_item_data['base_price'] = $price;

        // 將產品折扣價設置為自定義購物車商品數據
        $cart_item_data['new_price'] = $price * (100 - $discount_percentage) / 100;

        // 將百分比設置為自定義購物車商品數據
        $cart_item_data['percentage'] = $discount_percentage;
    }

    返回 $cart_item_data;
}

// 顯示產品原價
add_filter('woocommerce_cart_item_price', 'ts_display_cart_items_default_price', 20, 3);
功能 ts_display_cart_items_default_price($product_price, $cart_item, $cart_item_key){
    if( isset($cart_item['base_price']) ) {
        $product = $cart_item['data'];
        $product_price = wc_price( wc_get_price_to_display( $product, array( 'price' => $cart_item['base_price'] ) ) );
    }
    返回 $product_price;
}

// 顯示帶有折扣百分比的產品名稱
add_filter('woocommerce_cart_item_name', 'ts_add_percentage_to_item_name', 20, 3);
函數 ts_add_percentage_to_item_name( $product_name, $cart_item, $cart_item_key ){
    if( isset($cart_item['percentage']) && isset($cart_item['base_price']) ) {
        if( $cart_item['data']->get_price() != $cart_item['base_price'] )
            $product_name .= ' <em>(' . $cart_item['percentage'] . '% discounted)</em>';
    }
    返回 $product_name;
}

add_action('woocommerce_before_calculate_totals', 'ts_custom_discounted_cart_item_price', 20, 1);
功能 ts_custom_discounted_cart_item_price($cart) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        返回;

    if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
        返回;

    ## ----- 在此處設置數量 ----- ##
    $targeted_qty = 2; // 目標數量

    // 遍歷購物車項目
    foreach ( $cart->get_cart() as $cart_item ) {

        // 對於 2 個或更多的項目數量
        if($cart_item['quantity'] >= $targeted_qty && isset($cart_item['new_price']) ){

            // 設置購物車商品折扣價
            $cart_item['data']->set_price($cart_item['new_price']);
        }
    }
} 

通過這種方式,您可以通過在添加到過濾鉤woocommerce_add_cart_item_data的函數內聲明適當的條件,使用代碼片段為非銷售、銷售或所有產品(即全店範圍)提供基於數量的折扣。

如何使用插件在 WooCommerce 中根據數量提供折扣

如果您不習慣在網站文件中添加代碼片段,您也可以使用插件來執行此操作:

  1. WooCommerce 的折扣規則:這是一個免費插件,可讓您不僅根據產品數量添加百分比折扣,還可以在您的客戶超過特定價格限制時添加折扣。 您還可以在一定數量的項目(不一定是同一產品)上添加百分比折扣。 此插件的 PRO 版本允許您添加類別範圍的折扣、BOGO(買一送一)優惠、固定價格折扣而不是百分比折扣等等。
  2. WooCommerce 的有條件折扣:這是另一個插件,在其免費版本中提供幾乎所有重要功能 - 您可以根據數量、購物車商品數量、特定類別、特定產品、可變功能(藍色襯衫、中號尺寸)添加折扣等),對於某些商店角色甚至特定客戶。 它的 PRO 版本具有一些附加功能,其中之一是在購買特定產品時將產品免費添加到購物車中。
  3. 智能優惠券:除了禮品卡、商店積分、URL優惠券和高級限制外,您還可以根據購物車中特定產品的數量(例如10件襯衫)以及購物車中多個產品的總產品數量來限制優惠券購物車(例如——5 件襯衫 + 2 條褲子 + 3 條腰帶)。

通過這種方式,您可以使用代碼片段或插件根據產品數量向您的客戶提供折扣。