WordPressのCronスケジュール登録で第三引数argsを指定したイベントの削除方法
wp_schedule_single_eventでcronスケジュールを登録する時に第三引数argsを指定した場合の、スケジュール削除方法です。(wp_schedule_eventの場合は第四引数)
サンプルコード
$res_get_cron_array = _get_cron_array(); $sche_time_for_delete = ''; $sche_args_for_delete = array(); foreach( $res_get_cron_array as $get_cron_key => $get_cron_val_arr ){ $sche_time_for_delete = $get_cron_key; foreach( $get_cron_val_arr as $sche_name => $sche_val ){ if( '削除したいフック名' == $sche_name ){ $unknown_key = key( $sche_val ); $sche_args_for_clear = $sche_val[$unknown_key]['args']; wp_unschedule_event( $sche_time_for_delete, '削除したいフック名', $sche_args_for_clear ); } } }
解説
cronイベントを削除する場合、wp_unschedule_event()で削除できますが、
第三引数($args)を指定したcronイベントを削除する場合は、この引数も指定しないといけません。
もし$argsが固定値だったならば、その値を指定してやればよいのですが、
固定値でない場合、$args値を取得する必要があります。
_get_cron_array()関数を使うと、現在登録中の全てのcronイベント情報が取得できます。
この中から、削除したいイベントの情報($args)を取得してます。
_get_cron_arrayで取得した値は以下のような配列で取得できます。
array(22) { [16051237492]=> //これが登録されてる$timestampです。 array(1) { ["hogehoge_hook"]=> //これがフック名 array(1) { ["12345678dcc463e81346846ddc226"]=> array(2) { ["schedule"]=> bool(false) ["args"]=> //ここが第三引数の$args array(1) { [0]=> int(1605507462) } } } },
必要な情報が揃ったら、
wp_unschedule_event( int $timestamp, string $hook, array $args = array() )
します。
上記のサンプルコードでは、指定したフック(’削除したいフック名’)が全て削除できます。
コメント