// 自動実行用関数
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時
}