WordPressで$show_bonusを取得してモーダルを表示する開発

「ログインしている会員に、1日1回だけ特別な情報や案内を出したい」
ECサイトや会員制サービスでは、こういった“インセンティブモーダル”の仕組みがよく使われます。
今回は、WordPress + PHP で「1日1回だけモーダルを表示する」という、非常にシンプルで奥深い処理を実装しようとして、ハマった話を共有します。

✅ やりたかったこと

  • ログインしているユーザーにだけモーダルを表示
  • 1日1回だけ出す(何度リロードしても2回目は出さない)
  • その日の初回表示後は、表示した記録を保存する
  • myCREDでポイントを付与する機能と連携

✅ 最初の設計

phpコピーする編集する$bonus_shown_date = get_user_meta($user_id, 'incentive_shown_date', true);
if ($bonus_shown_date !== $today) {
    $show_modal = true;
}
  • 条件を満たしたときだけ $show_modal = true
  • モーダル表示後に update_user_meta() で記録

でも…出ない。

  • どうしてもモーダルが表示されない
  • delete_user_meta() を使うと出る(=条件は合ってる)
  • でも、実際には表示前に “表示済み” として記録されてしまっている

試したこと

  • 記録処理のタイミングをずらす(モーダル出力の直後に移動)
  • functions.phpinit アクションを調査
  • セッションやクッキーで制御してみる
  • テーマ全体を grep 検索

🧠最終的な突破口

user_meta のキー名を変えました。

phpコピーする編集するget_user_meta($user_id, 'incentive_shown_date_v2', true);
  • たったこれだけで、モーダルが表示された
  • 原因は functions.php のどこかで 旧キーを上書きしていたことだった
  • 名前を変えることで、完全に他処理の干渉を断ち切れた

✅ 最終構成(シンプル・確実)

  1. 表示判定(条件を満たしたら true
  2. モーダルHTML出力
  3. 出力の直後にだけ記録
phpコピーする編集する<?php if ($show_modal): ?>
  <div class="incentive-modal">...</div>
  <?php update_user_meta($user_id, 'incentive_shown_date_v2', $today); ?>
<?php endif; ?>

💡 教訓まとめ

  • user_meta のキー名は 他ファイルと衝突しないように工夫する
  • 記録処理は 出力の“あと”に行う
  • 最悪、名前を変えるだけで全部解決することもある

求人採用のエントリーはこちら

求人の応募