2026年5月20日

2026年5月20日

WooCommerceのクーポン機能を設定する方法

はじめに

WooCommerceのクーポン機能は定率割引・定額割引・送料無料の3種類に対応しています。使用回数制限・最低購入金額・特定商品への適用など細かい条件設定ができます。

症状・原因

  • WooCommerceでクーポンコードを作成したい
  • 特定商品・カテゴリーにのみ適用されるクーポンを設定したい
  • クーポンの使用回数や有効期限を制限したい
  • コードでクーポンを自動適用したい

解決手順

ステップ1:クーポン機能を有効化する

WooCommerce → 設定 → 一般:
→「クーポンを有効化する」: ON
→「チェックアウトでクーポンコードの入力欄を表示」: ON
→「変更を保存」

ステップ2:クーポンを作成する

マーケティング → クーポン → 新規追加:
→ クーポンコード: SUMMER20(大文字・小文字問わず)
→「クーポンデータ」パネル:

一般:
→ 割引タイプ:
  - 定率割引: 購入額の20%オフ
  - 定額割引: 500円オフ
  - 定率商品割引(旧形式)
→ クーポン金額: 20(%)または 500(円)
→ 送料無料を許可: OFF/ON
→ 有効期限: 2024/12/31

使用制限:
→ 最低購入金額: 3000
→ 最高購入金額: 50000
→「個別使用のみ」: ON(他クーポンと併用不可)
→ 除外商品・除外カテゴリー: (任意)

使用上限:
→ クーポンの使用上限: 100(全体)
→ ユーザーごとの使用上限: 1

ステップ3:WP-CLIでクーポンを管理する

# クーポン一覧を表示
wp post list --post_type=shop_coupon --fields=ID,post_title,post_status --format=table

# クーポンの詳細設定を確認
wp post meta list {COUPON_ID} --format=table

# 主要なメタキーで確認
wp post meta get {ID} discount_type          # percent / fixed_cart
wp post meta get {ID} coupon_amount          # 割引金額・率
wp post meta get {ID} date_expires           # 有効期限タイムスタンプ
wp post meta get {ID} usage_count            # 使用済み回数
wp post meta get {ID} usage_limit            # 最大使用回数
wp post meta get {ID} minimum_amount         # 最低購入金額

# クーポン使用履歴を確認
wp post meta get {ID} _used_by --format=json

ステップ4:コードでクーポンを作成する

// functions.php — プログラムからクーポンを作成
function myplugin_create_coupon(string $code, int $amount, string $type = 'percent'): int {
    $coupon_id = wp_insert_post([
        'post_title'  => strtoupper($code),
        'post_type'   => 'shop_coupon',
        'post_status' => 'publish',
    ]);

    if (is_wp_error($coupon_id)) {
        return 0;
    }

    update_post_meta($coupon_id, 'discount_type',   $type);
    update_post_meta($coupon_id, 'coupon_amount',   $amount);
    update_post_meta($coupon_id, 'usage_limit',     100);
    update_post_meta($coupon_id, 'usage_limit_per_user', 1);
    update_post_meta($coupon_id, 'minimum_amount',  3000);
    update_post_meta($coupon_id, 'date_expires',    strtotime('+30 days'));
    update_post_meta($coupon_id, 'individual_use',  'yes');

    return $coupon_id;
}

// 使用例
myplugin_create_coupon('SUMMER20', 20, 'percent');

ステップ5:クーポンを自動適用する

// functions.php — 特定条件でクーポンを自動適用
add_action('woocommerce_before_cart', function(): void {
    if (is_user_logged_in() && !WC()->cart->has_discount('MEMBER10')) {
        $user = wp_get_current_user();
        // 会員登録から30日以内のユーザーに自動適用
        $registered = strtotime($user->user_registered);
        if (time() - $registered < 30 * DAY_IN_SECONDS) {
            WC()->cart->apply_coupon('MEMBER10');
        }
    }
});

// URLパラメーターでクーポンを自動適用
// https://example.com/?coupon=SUMMER20
add_action('wp_loaded', function(): void {
    $coupon = sanitize_text_field($_GET['coupon'] ?? '');
    if ($coupon && function_exists('WC') && WC()->cart) {
        WC()->cart->apply_coupon($coupon);
    }
});

ステップ6:クーポンの統計を確認する

# 期間内に使用されたクーポンの集計
wp db query "
SELECT p.post_title AS coupon_code,
       pm.meta_value AS usage_count
FROM wp_posts p
JOIN wp_postmeta pm ON p.ID = pm.post_id
WHERE p.post_type = 'shop_coupon'
AND pm.meta_key = 'usage_count'
AND CAST(pm.meta_value AS UNSIGNED) > 0
ORDER BY CAST(pm.meta_value AS UNSIGNED) DESC
LIMIT 10"

注意事項

  • クーポンコードは大文字・小文字を区別しません(内部では大文字に正規化されます)
  • 「個別使用のみ」を設定すると他のクーポンとの併用ができなくなります
  • 自動適用クーポンは意図しない重複適用を防ぐため has_discount() で確認してください

まとめ

WooCommerceのクーポンは管理画面から定率・定額・送料無料を設定し、使用回数・有効期限・最低購入金額で細かく制御できます。WC()->cart->apply_coupon() でコードからの自動適用も可能です。

お気軽にご相談ください

お見積りへ お問い合わせへ