前回は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の予約投稿の仕組みを簡単に解説 / 予約投稿が失敗することもあるのがWordPress | stryhの日記 ~stryh/changelog