Skip to content

日別記事下書き自動作成バッチ

目的

日別記事(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() で、基準日と「考察日の日目」設定から算出する。

処理内容

  1. Cron 引数の slot が 2100 でなければ終了する。
  2. 自動作成設定が無効なら終了する。
  3. 対象考察日単位で MySQL ユーザー定義ロックを取得する。
  4. 同一 kousatsu_datedaily_article が既にあれば終了する。
  5. 設定済み投稿者を解決する。
  6. kousatsu_date と対象ホール初期値を meta_input に入れて投稿を作成する。
  7. 設定が有効な場合、次回の単発 Cron を登録する。

重複防止

観点内容
Cron 重複同一 slot の次回イベントが存在する場合は追加登録しない
実行重複DailyArticleAutoCreateMysqlRunLock で対象考察日単位の MySQL ロックを取得する
投稿重複kousatsu_date が同じ投稿(ゴミ箱以外、下書き含む)があれば作成しない

投稿者・公開状態

投稿者 ID が解決できない場合は作成せず、Cron 運用向けログを出す。投稿状態を publish に設定していても、投稿者に公開権限がない場合は draft にフォールバックする。

参照ファイル

  • core_src/PostType/DailyArticle/Cron/DailyArticleAutoCreateScheduler.php
  • core_src/PostType/DailyArticle/Cron/DailyArticleAutoCreateRunner.php
  • core_src/PostType/DailyArticle/Cron/DailyArticleAutoCreateMysqlRunLock.php
  • core_src/Util/daily_article_auto_create/DailyArticleAutoCreateOptions.php
  • core_src/Bootstrap/service_provider/AdminServiceProvider.php