如何在 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來設置數量,從而滿足您的要求。您希望應用折扣。
如果您在購物車中添加 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 中根據數量提供折扣
如果您不習慣在網站文件中添加代碼片段,您也可以使用插件來執行此操作:
- WooCommerce 的折扣規則:這是一個免費插件,可讓您不僅根據產品數量添加百分比折扣,還可以在您的客戶超過特定價格限制時添加折扣。 您還可以在一定數量的項目(不一定是同一產品)上添加百分比折扣。 此插件的 PRO 版本允許您添加類別範圍的折扣、BOGO(買一送一)優惠、固定價格折扣而不是百分比折扣等等。
- WooCommerce 的有條件折扣:這是另一個插件,在其免費版本中提供幾乎所有重要功能 - 您可以根據數量、購物車商品數量、特定類別、特定產品、可變功能(藍色襯衫、中號尺寸)添加折扣等),對於某些商店角色甚至特定客戶。 它的 PRO 版本具有一些附加功能,其中之一是在購買特定產品時將產品免費添加到購物車中。
- 智能優惠券:除了禮品卡、商店積分、URL優惠券和高級限制外,您還可以根據購物車中特定產品的數量(例如10件襯衫)以及購物車中多個產品的總產品數量來限制優惠券購物車(例如——5 件襯衫 + 2 條褲子 + 3 條腰帶)。
通過這種方式,您可以使用代碼片段或插件根據產品數量向您的客戶提供折扣。