19年10月更新こんにちはー、プライム・ストラテジーの森下です。今回はWP-Cronという機能について詳しく解説していきたいと思います。WP-Cronとは?WordPressがWordPressで時間ベースのタスクをスケジュールする仕組みのことです。更新の確認や予約投稿等、WordPressのいくつかのコア機能は、WP-Cronを利用しています。WP-Cronの特徴Linuxサーバーの場合は、システムCronを使ってスケジュール管理することもでできるのですが、サーバーをいじることができない等Cronを使えない環境もあります。このような状況の場合WP-Cronを使うと簡単にスクリプト実行のスケジュール管理をすることができます。・指定時間を過ぎた最初のアクセス時に実行される・そのため、指定時間に必ず実行される保証はないそのため、アクセスがあまりないサイトでは実行が遅延しがちになるという点に注意です。ローカル開発環境だと正常に動作しないことがあるようです。ちなみにスケジュールタスクを実行するUNIXプログラム、crontabにちなんで命名されています。3.実行プロセスについて仕組み自体はある程度理解しているつもりでしたが、コアファイルを追って見たことがなかったためコアファイルのどこで読み込まれているかを確認していきます。ちなみに今回確認したWordPressのバージョンは5.2.2です。1まずドキュメントルート直下のindex.phpが読み込まれます。2次にwp-blog-header.phpが読み込まれます。3次にwp-blog-header.php内でwp-config.phpが読み込まれます。4次にwp-config.php内でwp-settings.phpが読み込まれます。5wp-includesディレクトリ内のdefault-filters.phpというファイルが読み込まれます。}という記述が確認できます。このwp_cronという関数がどこのファイルに定義されているかをgrepコマンドで探すとwp-includesディレクトリ内のcron.phpというファイル内で定義されています。7initのタイミングでwp_cron関数が実行されます。);}8wp_cron関数の中身を見ていきます。細かい制御等部分の説明は省きます。wp_get_ready_cron_jobsという関数を使用して$cronsという変数に格納しています。wp_get_ready_cron_jobs関数は同じcron.phpファイル内で定義されています。下記がwp_get_ready_cron_jobs関数の中身です。$results;}ここでは登録されているジョブをループで回し、実行可能なジョブのみ変数$resultsに格納しています。言い換えると過去のタイムスタンプに限定して変数に格納しています。ちなみWP-Cronに登録されているジョブはwp_optionsというテーブルにシリアライズ化されて格納されており、この関数内では_get_cron_arrayという関数でwp_optionsからジョブを取得し$cronsという変数に格納しています。それでは再度関数wp_cronに戻ります。wp_get_ready_cron_jobs関数で取得した関数$cronsをループで回し、spawn_cronという関数にたどり着きます。);という記述部分でドキュメントルート直下のwp-cron.phpにPOSTメソッドを送信しています。これをトリガーに実行可能なジョブがループ処理され実行されているようです。ちなみにwp-cron.phpの冒頭にあるignore_user_abort(true);はwp-cron.phpはクライアントの接続が切断されても、​処理を中断しないために記述されています。true);と記述しておいたほうがいいかと思います。すれば余計な処理が走りません。使用する場合でも、Linux上のcronが使用できる環境であればcronにwp-cron.phpを登録しておいたほうが良いかと思います。することで指定時間に必ず処理が実行されます。今回はいかがでしたでしょうか。今後新規サイト構築やサーバの引っ越しを考えられている方がいらっしゃいましたら、是非日本に大規模なデータセンターを構え、手厚いサービスをしてくれることで定評のある鈴与シンワートの「S-Port」クラウドを導入してみてください。併せてKUSANAGIというWordPressサイトをキャッシュ未使用でも高速化を可能とするサービスも是非使ってみてはいかがでしょうか。ご興味がある方は以下をご参照ください。大学では法学部に所属しており、大学3回生から英語に目覚めカナダに約8ヶ月間の留学を経験。将来海外で働きたいという夢から世界共通のWEBというものに着目し、現在プライム・ストラテジー株式会社にて日々精進しております。WordPressをはじめ、様々な技術について面白おかしく発信することでWEB業界に貢献したいと考えております。