WordPressで予約投稿失敗の原因究明のため、cron.phpを読んでみました

前回はwp-cron.phpを読んでみましたが、今回はcron.phpです。

このファイルは「wp-includes」フォルダにあり、WordPressの擬似CRON関連の関数を記述しています。

wp_schedule_single_event

CRONジョブのリストに新しく追加するための関数です。

予約投稿など、定期的なCRONジョブではなく、1度だけ実行されるものに使います。

この関数の引数は以下のように定義されています。

function wp_schedule_single_event( $timestamp, $hook, $args = array()) {

「$timestamp」は実行時刻、「$hook」は固有のCRONジョブを表す文字列、「$args」はその他のパラメーターです。

wp_schedule_event

定期的なCRONジョブを設定する関数です。

function wp_schedule_event( $timestamp, $recurrence, $hook, $args = array()) {

「$recurrence」に頻度を表す文字列を入れます。「hourly」「daily」「twicedaily」などという文字列です。

wp_reschedule_event

1件のCRONジョブの頻度を再設定する関数です。

function wp_reschedule_event( $timestamp, $recurrence, $hook, $args = array()) {

wp_unschedule_event

1件のCRONジョブを削除します。

function wp_unschedule_event( $timestamp, $hook, $args = array() ) {

wp_unschedule_event

第一引数「$hook」で設定されているCRONジョブを全て削除します。

function wp_clear_scheduled_hook( $hook, $args = array() ) {

wp_clear_scheduled_hook

第一引数「$hook」で設定されているCRONジョブを全て削除します。

function wp_clear_scheduled_hook( $hook, $args = array() ) {

wp_clear_scheduled_hook

第一引数「$hook」で設定されているCRONジョブの実行時刻を返します。

無ければFalseを返します。

function wp_next_scheduled( $hook, $args = array() ) {

spawn_cron

CRONジョブを実行します。

処理に異常が出ないようにいろいろ判断してくれてます。

最終的に行うのは、HTTPを通してwp-cron.phpを呼び出す、ということです。

次項目のwp_cron関数から呼び出されます。

wp_cron

CRONジョブを実行します。

ここから前述のspawn_cron関数を呼び出します。

このwp_cron関数自体は、WordPress標準状態では「add_action( ‘init’, ‘wp_cron’ );」というようにアクションフック「init」の部分で呼び出されています。

wp_get_schedules

CRONジョブの頻度を表す「hourly」「daily」「twicedaily」などの文字列を設定します。

以下のようなコードをfunctions.phpなどに記述することで、自分で頻度を追加できます。

add_filter( 'cron_schedules', 'cron_add_weekly' );
 
 function cron_add_weekly( $schedules ) {
 	// Adds once weekly to the existing schedules.
 	$schedules['weekly'] = array(
 		'interval' => 604800,
 		'display' => __( 'Once Weekly' )
 	);
 	return $schedules;
 }

※以上のコードはWordPress Codexから引用させて頂きました。

wp_get_schedule

第一引数に設定されたCRONジョブの頻度を表す文字列を取得します。

function wp_get_schedule($hook, $args = array()) {

WordPressソースの中では一度も使われていないような・・・(少なくともWordPress3.5以降は。)

過去バージョンとの互換性のためなのかプラグイン用なのか、と推測しています。

_get_cron_array

CRONジョブはデータベースの「wp_options」(または「(テーブルプレフィックス)_options」)に保存されています。

それを取り出す関数です。

Privateな関数扱いです。

_set_cron_array

データベースにCRONジョブを保存します。

Privateな関数扱いです。

_upgrade_cron_array

CRONジョブをアップグレードします。

とは言っても、まだ明確な目的は理解していませんが、恐らくWordPressのバージョン2以前からバージョン3に最適化するものだと推測しています。

さいごに

というわけで、wp-cron.phpと合わせて、cron.phpを読んでみました。

目的が「予約投稿の失敗の原因を探る」というものでしたが、実は今のところ原因は不明です。(恐らくwp-cron.phpの中のキャッシュに関するものだろうなということのみ。)

ただ、WordPressの擬似CRONに関しては理解は深まったので、更に研究を続けてみようかと思います。

あと、使えそうだなと思ったのは、やはり実行頻度の追加ですね。(「wp_get_schedules」を参照)

「BackWPup」「WP-DBManager」などのバックアップ/データベース最適化系のプラグインを導入している場合に、その頻度を自由に設定できるのは、目的に合わせやすいので使えるのではないかと思います。

スポンサードリンク

WordPressで予約投稿失敗の原因究明のため、cron.phpを読んでみました」への1件のフィードバック

  1. ピンバック: WordPressの予約投稿の仕組みを簡単に解説 / 予約投稿が失敗することもあるのがWordPress | stryhの日記 ~stryh/changelog

twitterまたはFacebookでもコメントして頂けます