Skip to content

ADM-013 誕生日シード管理画面

概要

  • スロカレから誕生日データを取得して db_birthday へ投入する実行と、投入結果の確認を行う管理画面。
  • WordPress 設定サブメニュー(add_options_page)として登録。CRUD 操作はフォーム POST、シード実行は admin-ajax 経由で処理する。
  • 再実行防止は Transient で TTL=1時間のクールダウン。実行中の二重起動防止は wp_options ロックで制御する。
  • 一覧はキャラ名・作品名・区分・月・日でフィルタリング可能で、ページネーション(デフォルト 50 件)とソートに対応する。

外部インターフェース

管理画面 URL

項目
URL/wp-admin/options-general.php?page=birthday-seed-admin
メニュー名誕生日シード
権限manage_options

フォーム POST(同期 CRUD)

すべて POST options-general.php?page=birthday-seed-admin へ送信し、処理後にリダイレクトする。

birthday_seed_action処理
add新規エントリ追加
update既存エントリ更新
delete指定 ID のエントリ削除

Nonce フィールド: birthday_seed_nonce(検証アクション: birthday_seed_admin

主な POST パラメータ

フィールド操作型・制約説明
birthday_seed_idupdate/delete正整数操作対象エントリ ID
birthday_seed_monthadd/update整数 1〜12月(必須)
birthday_seed_dayadd/update整数 1〜31日(必須)
birthday_seed_diviadd/update"キャラ誕" または "声優誕"区分(必須)
birthday_seed_charaadd/update文字列(max 255文字)キャラ名(必須)
birthday_seed_titleadd/update文字列(max 255文字)作品名(省略可)
birthday_seed_actoradd/update文字列(max 255文字)声優名(声優誕 選択時のみ有効)

備考: 声優誕 かつ声優名あり → DB 保存値は (声誕)声優名 の形式に変換して保存。

admin-ajax(HTTP 契約)

すべて POST /wp-admin/admin-ajax.phpmanage_options 権限+nonce 必須。

action説明
birthday_seed_runスロカレ標準 URL でシードを実行
birthday_seed_run_by_url指定 URL からシードを実行

POST パラメータ・レスポンス data の契約は ADM-013-1 birthday_seed_run および ADM-013-2 birthday_seed_run_by_urlEP-015 / EP-016)を参照。

データ

テーブル: db_birthday

カラム説明
idint PK自動採番
monthint月(1〜12)
dayint日(1〜31)
divivarchar区分。キャラ誕 / (声誕)声優名 形式
charavarchar(255)キャラ名
titlevarchar(255)作品名

一覧フィルタ・ソート

GET パラメータ説明デフォルト
bs_search_charaキャラ名部分一致空(全件)
bs_search_title作品名部分一致空(全件)
bs_search_divi区分フィルタ(空/キャラ誕/声優誕)空(全件)
bs_month月フィルタ(1〜12、0=指定なし)0
bs_day日フィルタ(1〜31、0=指定なし)0
bs_orderbyソートキー(id/month/day/divi/chara/title)id
bs_orderソート方向(asc/desc)asc
bs_pagedページ番号(1以上)1
bs_per_page表示件数(20/50/100/200)50

クールダウン・ロック制御

仕組みキーTTL / 閾値用途
Transient クールダウンbirthday_seed_cooldown3600秒(1時間)シード実行後の再実行防止(時刻を value に保存)
wp_options 実行中ロックbirthday_seed_cooldown_running同時二重起動防止
stale ロック回収閾値LOCK_STALE_SECONDS = 600600秒ロックが 600秒以上経過したら古いロックとみなし回収

エラー

条件ユーザー向け挙動メッセージ / ログ
nonce 不正リダイレクト+エラーメッセージ表示Messages::AUTH_FAILED
manage_options 権限なしwp_die() または JSON エラーMessages::PERMISSION_DENIED
月が範囲外(1〜12以外)リダイレクト+エラーメッセージ表示Messages::BIRTHDAY_SEED_MONTH_INVALID
日が範囲外(1〜31以外)リダイレクト+エラーメッセージ表示Messages::BIRTHDAY_SEED_DAY_INVALID
月日の組み合わせが不正(例: 2/31)リダイレクト+エラーメッセージ表示Messages::BIRTHDAY_SEED_DATE_INVALID
区分が空リダイレクト+エラーメッセージ表示Messages::BIRTHDAY_SEED_DIVI_REQUIRED
区分が不正値リダイレクト+エラーメッセージ表示Messages::BIRTHDAY_SEED_DIVI_INVALID
キャラ名が空リダイレクト+エラーメッセージ表示Messages::BIRTHDAY_SEED_CHARA_REQUIRED
キャラ名が 255 文字超リダイレクト+エラーメッセージ表示Messages::BIRTHDAY_SEED_CHARA_MAX
作品名が 255 文字超リダイレクト+エラーメッセージ表示Messages::BIRTHDAY_SEED_TITLE_MAX
声優名が 255 文字超(声優誕のみ)リダイレクト+エラーメッセージ表示Messages::BIRTHDAY_SEED_ACTOR_MAX
ID が 0 以下(update/delete)リダイレクト+エラーメッセージ表示Messages::REST_INVALID_ID_MESSAGE
追加時に重複エントリリダイレクト+エラーメッセージ表示Messages::BIRTHDAY_SEED_ADD_DUPLICATE
クールダウン中にシード実行JSON エラー返却Messages::BIRTHDAY_SEED_COOLDOWN_ACTIVE(残時間付き)
実行中ロック取得失敗JSON エラー返却Messages::BIRTHDAY_SEED_RUN_IN_PROGRESS
シードサービスで \ThrowableJSON エラー返却error_log[BirthdaySeedAdminPage] 先頭)
URL が空(by_url)JSON エラー返却Messages::BIRTHDAY_SEED_URL_REQUIRED
月・日両方指定で不正日付(例: 2/31)日パラメータをクリアしてリダイレクトMessages::BIRTHDAY_SEED_DATE_INVALID