wpでcron処理をfunctions.php内に設置

// 自動実行用関数
function my_auto_function() {
・・・
処理
・・・
}
add_action ( 'my_auto_function_cron', 'my_auto_function' );

// cron登録処理
if ( !wp_next_scheduled( 'my_auto_function_cron' ) ) {  // 何度も同じcronが登録されないように
  date_default_timezone_set('Asia/Tokyo');  // タイムゾーンの設定
  wp_schedule_event( strtotime('2017-06-29 02:00:00'), 'daily', 'my_auto_function_cron' );
}

プラグイン「WP Crontrol」を組み込むことで、簡単にcron動作状況を確認出来る。

// 自動実行用関数
function my_auto_function() {
  $content = 'テンプレートの内容です';
  $title = 'テンプレートのタイトルです';
  $post = array (
            'post_content' => $content,
            'post_title'   => $title,
            'post_status'  => 'draft',
            'post_type'    => 'post'
          );
  wp_insert_post( $post );
}
add_action ( 'my_auto_function_cron', 'my_auto_function' );

// cron登録処理
if ( !wp_next_scheduled( 'my_auto_function_cron' ) ) {  // 何度も同じcronが登録されないように
  date_default_timezone_set('Asia/Tokyo');
  wp_schedule_event( strtotime('2017-06-30 02:00:00'), 'daily', 'my_auto_function_cron' );
}

秒間隔で実行する

function cron_add_20sec( $schedules ) {
    $schedules['20sec'] = array(
        'interval' => 20,
        'display' => __( '20秒1回' )
    );
    return $schedules;
}
add_filter( 'cron_schedules', 'cron_add_20sec' );

wp_cronは、60秒ごとに起動するので、60秒以下の上記のような設定では、期待通りの動作はしない。

「wp_schedule_event」は、同じことをリピートしたい場合に使います。特に「毎週・毎日・毎時間・毎分」などの場合に使うと便利です。

「wp_schedule_single_event」は、繰り返しがない場合や、変則的なスケジュール(15日後・毎月特定の日など)の場合に使います。

function hoge_function() {
 //
 //実行したい内容
 //
}
add_action ( 'hoge_add_cron', 'hoge_function' );

//cron登録処理
//スケジュール2重登録防止
if ( !wp_next_scheduled( 'hoge_add_cron' ) ) {
 //
 //9時間差がある
 //
 wp_schedule_event( strtotime(date("Ymd 3:00:00")), 'daily', 'hoge_add_cron' );
}

日本時間の朝9時にクーロンを起動したい場合は、-9時間した日付をUNIXタイムで指定する必要があります。例:日本の朝4時に起動させたい場合

strtotime(date('Ymd 19:00:00'));

「wp_schedule_single_event」は最初のarg(日時を指定する変数)に指定した時刻に1度だけスケジュールを実行します。

1度だけ起動するのは、日付を固定日付にした場合で、日付を動的に設定すれば、好きな時に1度だけ起動できるので、リピート起動のようなことができます。

動的にする場合は「mktime」を使うと便利です。

下記の例だと15分ごとにスケジュール起動します。

function hoge_function() {
 //
 //実行したい内容
 //
}
add_action ( 'hoge_add_cron', 'hoge_function' );

//cron登録処理
//スケジュール2重登録防止
if ( !wp_next_scheduled( 'hoge_add_cron' ) ) {
 //
 //9時間差がある
 //
 wp_schedule_single_event( strtotime(date('Ymd H:00:00', mktime(date('H'), date('i')+15, 0, date('m'), date('d'), date('Y')))), 'hoge_add_cron' );//7時
}

毎月15日に起動させたい場合も「wp_schedule_single_event」を使えばできます。

メモ

mktimeで「date(‘m’)+1」と指定しているので、翌月からスタートになります。当月分は自分で起動させる必要があります。

function hoge_function() {
 //
 //実行したい内容
 //
}
add_action ( 'hoge_add_cron', 'hoge_function' );

//cron登録処理
//スケジュール2重登録防止
if ( !wp_next_scheduled( 'hoge_add_cron' ) ) {
 //
 //9時間差がある
 //
 wp_schedule_single_event( strtotime(date('Ymd H:i:s', mktime(0, 0, 0, date('m')+1, 15, date('Y')))), 'hoge_add_cron' );//7時
}