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

function 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 );

function 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 );
function 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'] . '% 割引)</em>';
    }
    $product_name を返します。
}

add_action( 'woocommerce_before_calculate_totals', 'ts_custom_discounted_cart_item_price', 20, 1 );
function 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 つ以上追加すると、割引価格が表示されるようになりました。

上記のコードでは、4 つの主要なフックを使用しています。

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 );
function 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);

    // 非セール製品のみに割引を提供するには、ここに条件を追加します
    if( ! $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 );
function 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 );
function 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'] . '% 割引)</em>';
    }
    $product_name を返します。
}

add_action( 'woocommerce_before_calculate_totals', 'ts_custom_discounted_cart_item_price', 20, 1 );
function 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 で数量に基づいて割引を提供する方法

Web サイトのファイルにコード スニペットを追加することに慣れていない場合は、プラグインを使用してこれを行うこともできます。

  1. WooCommerce の割引ルール: これは無料のプラグインで、製品の数量だけでなく、顧客が特定の価格制限を超えた場合にもパーセンテージ ディスカウントを追加できます。 特定の数のアイテム (必ずしも同じ製品である必要はありません) にパーセンテージ ディスカウントを追加することもできます。 このプラグインの PRO バージョンでは、カテゴリ全体の割引、BOGO (Buy One Get One Free) 取引、パーセンテージ割引ではなく固定価格割引などを追加できます。
  2. WooCommerce の条件付き割引:これは、無料版でほぼすべての重要な機能を提供する別のプラグインです。数量、カート項目の数、特定のカテゴリ、特定の製品、可変機能 (青いシャツ、サイズ M) に基づいて割引を追加できます。など)、特定のショップの役割、または特定の顧客に対しても。 そのPROバージョンにはいくつかの追加機能があり、そのうちの1つは、特定の製品の購入時に無料で製品をカートに追加することです.
  3. スマート クーポン:ギフト カード、ストア クレジット、URL クーポン、および高度な制限とは別に、カート内の特定の製品の数 (例: シャツ 10 枚) と、カート内の複数の製品の合計製品数量に基づいてクーポンを制限することもできます。カート (例 – シャツ 5 着 + パンツ 2 着 + ベルト 3 着)。

このように、コード スニペットまたはプラグインを使用して、製品の数量に基づいて顧客に割引を提供できます。