WP Cron – планировщик задач WordPress

Создание одноразовой крон-задачи

wp_schedule_single_event( $timestamp, $hook, $args, $wp_error ); подробно

$timestamp — Время Timestamp, когда нужно выполнить событие.

Функции сron в WP использует временную зону UTC/GMT, а не локальную (установленную в настройках), поэтому для установки времени, используйте функцию time(), она тоже возвращает время в UTC/GMT.

$hook — Название хука, который нужно вызвать в указанное в параметре $timestamp время

$args — Параметры, которые нужно передать в функцию-обработчик хука

$wp_error — true — вернет объект WP_Error при неудаче. По умолчанию: false

 

Пример запланируемого события через час с текущего момента

// добавляет новую одноразовую крон задачу
add_action( 'admin_head', 'my_activation' );
function my_activation() {
	if( ! wp_next_scheduled( 'my_new_event' ) ) {
		wp_schedule_single_event( time() + 3600, 'my_new_event' );
		// time() + 3600 = 1 час с текущего момента.
	}
}

add_action( 'my_new_event','do_this_in_an_hour' );
function do_this_in_an_hour(){
	// делаем что-нибудь
}

Пример передачи аргументов в функцию-обработчик

add_action( 'my_new_event', 'do_this_in_an_hour', 10, 3 );
function do_this_in_an_hour( $arg1, $arg2, $arg3 ){
	// делаем что-либо
}

wp_schedule_single_event( time() + 3600, 'my_new_event', array( $arg1, $arg2, $arg3 ) );

Пример изменения email, указанный в настройках сайта через 10 минут после активации темы

// функция, которая поменяет email в настройках
function true_cherez_10_min() {
	update_option('admin_email','no-reply@truemisha.ru');
}
 
// этот хук и будет запускаться через 10 минут, я повесил на него только одну функцию (смены емайла), но можно и несколько
add_action( 'true_hook_1', 'true_cherez_10_min' );
 
// так как мы не хотим, чтобы ивент пытался планироваться каждый раз при обновлении страницы, то давайте повесим его на активацию темы
if( $_GET['activated'] == 'true' )
	wp_schedule_single_event( time() + 600, 'true_hook_1' ); // 600 секунд это 10 минут, если кто не знал :)

Пример удаления поста через 5 мин и потом еще через 5 мин

// последний параметр хука - количествово аргументов - у нас он один, у функции wp_trash_post() (какое счастье!) тоже
add_action( 'true_my_hook_2', 'wp_trash_post', 10, 1 );
 
if( $_GET['activated'] == 'true' ) {
	// создаем две задачи на один хук, но с разными аргументами (IDы постов)
	wp_schedule_single_event( time() + 300, 'true_my_hook_2', array( 2 ) );
	wp_schedule_single_event( strtotime('+10 minutes'), 'true_my_hook_2', array( 5 ) ); // для разнообразия я задал время немного по-другому
}

Пример запуска задания раз в сутки в 0 часов 0 минут (первый раз нужно запустить в ручную)

add_action('my_cron_event_once_day','my_cron_event_once_day');

function my_cron_event_once_day()
{
    /*
	Скрипт выполнения
	*/

    if(!wp_next_scheduled('my_cron_event_once_day'))
    {
        wp_schedule_single_event(mktime(0, 0, 0, intval(date("m")), intval(date("d")), intval(date("Y"))) + 86400, 'my_cron_event_once_day');
    }
}

Пример запуска задания раз в сутки в 0 часов 0 минут бесконечно

// ОДИН РАЗ ДОБАВИТЬ ЗАДАНИЕ
wp_schedule_event(mktime(0, 0, 0, intval(date("m")), intval(date("d")), intval(date("Y"))) + 86400, 'daily', 'my_cron_event_once_day');
// ------------------------

add_action('my_cron_event_once_day','my_cron_event_once_day');

function my_cron_event_once_day()
{
    /*
	Скрипт выполнения
	*/
}

 

Отключение запланированной задачи

wp_clear_scheduled_hook( $hook, $args, $wp_error ); подробно

$hook — Название хука

$args — Аргументы, которые передаются функции прикрепленной к хуку.

$wp_error — true — вернет объект WP_Error при неудаче. По умолчанию: false

 

Пример отмены ранее запланированного события

// если мы до этого добавляли событие, например:
// wp_schedule_single_event( time() + 3600, 'my_new_event' );

wp_clear_scheduled_hook( 'my_new_event' );

// или так, с указанием аргументов:
// wp_schedule_single_event( time() + 3600, 'my_new_event', array( 'some_arg' ) );

wp_clear_scheduled_hook( 'my_new_event', array( 'some_arg' ) );

 

Просмотр запланированных задач

Пример скрипта

$cron_zadachi = get_option( 'cron' );
var_dump( $cron_zadachi );

При помощи плагина Advanced Cron Manager: Инструменты -> Список задач планировщика (cron)

Скачать Advanced Cron Manager 2.4.1

 

События WP-Cron, запланированные непосредственно в ядре WordPress

Хук события Описание
wp_version_check Проверка обновлений ядра WordPress, дважды в день.
wp_update_plugins Проверка обновлений плагинов, дважды в день.
wp_update_themes Проверка обновлений тем, дважды в день.
wp_scheduled_delete Очистка корзины, для постов и комментариев, раз в день.
delete_expired_transients Очистка транзитов раз в день.
wp_scheduled_auto_draft_delete Удаление авто-черновиков (auto-draft) раз в день.
wp_privacy_delete_old_export_files Удаление старых файлов экспорта раз в день.
wp_site_health_scheduled_check Проверка и обновление статуса здоровья сайта раз в неделю.
wp_https_detection Проверка, поддерживается ли на сайте HTTPS, дважды в день.