Appearance
日別記事下書き自動作成バッチ
目的
日別記事(daily_article)の翌日分投稿を、毎日決まった時刻に自動作成する。管理画面で設定した投稿者・対象ホール・投稿状態を使い、同一考察日の投稿が既に存在する場合は作成しない。
管理画面の入力項目と保存契約は ADM-010 日別記事 自動作成設定管理画面 と REQ-001 日別記事 自動作成設定 保存 を参照する。
トリガー
| トリガー | 実行内容 |
|---|---|
admin_init | 設定が有効な場合、次回の単発 WP-Cron を同期する |
slot_kouryaku_daily_article_auto_create_options_saved | 設定保存後に既存 Cron を解除し、次回分を再登録する |
slot_kouryaku_daily_article_auto_create_cron | 日別記事の作成処理を実行する |
WP-Cron は daily 再発火ではなく、サイトタイムゾーンの壁時計 21:00 に寄せた単発イベント連鎖で登録する。実行後、設定が有効な場合だけ次回 21:00 を再登録する。
実行時刻と対象日
| 項目 | 内容 |
|---|---|
| 実行スロット | 2100(サイトタイムゾーンの 21:00) |
| Cron 引数 | slot, scheduled_kousatsu_date |
| 基準日 | Cron 登録時に固定した scheduled_kousatsu_date |
| フォールバック | 引数が空・不正な旧イベントは、実行時点のサイト日付の翌日を基準にする |
考察日は DailyArticleAutoCreateOptions::kousatsu_date_for_base_and_day_index() で、基準日と「考察日の日目」設定から算出する。
処理内容
- Cron 引数の slot が
2100でなければ終了する。 - 自動作成設定が無効なら終了する。
- 対象考察日単位で MySQL ユーザー定義ロックを取得する。
- 同一
kousatsu_dateのdaily_articleが既にあれば終了する。 - 設定済み投稿者を解決する。
kousatsu_dateと対象ホール初期値をmeta_inputに入れて投稿を作成する。- 設定が有効な場合、次回の単発 Cron を登録する。
重複防止
| 観点 | 内容 |
|---|---|
| Cron 重複 | 同一 slot の次回イベントが存在する場合は追加登録しない |
| 実行重複 | DailyArticleAutoCreateMysqlRunLock で対象考察日単位の MySQL ロックを取得する |
| 投稿重複 | kousatsu_date が同じ投稿(ゴミ箱以外、下書き含む)があれば作成しない |
投稿者・公開状態
投稿者 ID が解決できない場合は作成せず、Cron 運用向けログを出す。投稿状態を publish に設定していても、投稿者に公開権限がない場合は draft にフォールバックする。
参照ファイル
core_src/PostType/DailyArticle/Cron/DailyArticleAutoCreateScheduler.phpcore_src/PostType/DailyArticle/Cron/DailyArticleAutoCreateRunner.phpcore_src/PostType/DailyArticle/Cron/DailyArticleAutoCreateMysqlRunLock.phpcore_src/Util/daily_article_auto_create/DailyArticleAutoCreateOptions.phpcore_src/Bootstrap/service_provider/AdminServiceProvider.php