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