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, дважды в день. |