トップページ > ブログ > WooCommerce > WooCommerceで商品数が指定数以上にならクーポンを有効化

WooCommerceで商品数が指定数以上にならクーポンを有効化

WooCommerceのクーポンで、「〇個以上で〇円引き」のようなクーポンを作成することがあると思いますが、サイト内にクーポンコードを記載してもよいですが、クーポンの使用を忘れるユーザーがいたり、あとから使用したいユーザーがいると対応が面倒になります。

そこで条件を満たした場合に自動でクーポンを有効化、満たしていない場合は無効化する方法をご紹介します。

Contents

有効化したいクーポンを作成

まずは、条件を満たした際に有効化したいクーポンを作成しておきます。
条件はコード側で指定するので空でも大丈夫です。

ここで作成したクーポンコードはメモしておいてください。

Coupon Management – WooCommerce Docs

functions.phpにコードを追加

ここで紹介するコードは、$item_idsで指定した複数の商品の合計数が4つ以上であればクーポンが有効化されるように設定しています。

woocommerce_before_calculate_totals | action | WordPress | hookr.io

add_action( 'woocommerce_before_calculate_totals', 'auto_add_coupon_based_on_cart_items_count', 25, 1 );
function auto_add_coupon_based_on_cart_items_count( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    // 条件を設定
    $coupon = 'free_shipping'; // 有効化したいクーポンコード
    $item_ids = array(10, 11); // 商品のidを配列で指定する
    $item_count = 4; // 有効化する個数

    $total_count = 0;
    $matched    = false;

    foreach($cart->cart_contents as $k => $v) {
      if(in_array($v['product_id'], $item_ids, true)) {
        $total_count = $total_count + $v['quantity'];
        continue;
      }
    }

    if( $total_count >= $item_count ){
        $matched = true;
    }

    if( $matched && ! $cart->has_discount( $coupon )){
        $cart->add_discount( $coupon );
        wc_add_notice( __('送料無料が適用されました。'), 'success');
    }
    elseif( ! $matched && $cart->has_discount( $coupon )){
        $cart->remove_coupon( $coupon );
        wc_add_notice( __('特定の商品2点以上から送料無料が適用されます。'), 'error');
    }
}

まとめ

今回は商品数の合計によって判定しましたが、カテゴリーやタグや配送クラスで判断することもできますので、カスタマイズの参考にしていただければと思います。