WP Cron — это встроенный в WordPress механизм для запуска заданий по расписанию. Он позволяет автоматизировать рутинные задачи, такие как очистка кеша, отправка отчетов, обновление данных и многое другое. В этой статье мы подробно разберем работу WP Cron, расскажем, как создавать собственные задания, а также рассмотрим примеры кода и полезные плагины для управления задачами.
Что такое WP Cron и как он работает
WP Cron — это имитация системного cron на уровне PHP. В отличие от системного cron, WP Cron запускается не по реальному расписанию, а при посещении сайта пользователем. При каждом заходе WordPress проверяет, есть ли запланированные задачи, которые пора выполнить, и запускает их. Это решение удобно, если у вас нет доступа к системному cron, но имеет свои ограничения:
- Задачи выполняются только при посещении сайта, поэтому при отсутствии трафика задания могут задерживаться.
- WP Cron не подходит для очень частых или критически точных по времени задач.
Тем не менее, для большинства задач WP Cron отлично подходит и позволяет существенно упростить работу с сайтом.
Как создавать и регистрировать свои задачи в WP Cron
Для создания задачи нужно зарегистрировать событие и задать функцию, которая будет выполняться. Пример регистрации задачи, которая запускается раз в час:
function wprus_schedule_hourly_event() {
if (!wp_next_scheduled('wprus_hourly_task')) {
wp_schedule_event(time(), 'hourly', 'wprus_hourly_task');
}
}
add_action('wp', 'wprus_schedule_hourly_event');
function wprus_do_hourly_task() {
// Код вашей задачи, например, очистка временных данных
}
add_action('wprus_hourly_task', 'wprus_do_hourly_task');
Здесь мы проверяем, не запланирована ли уже задача wprus_hourly_task, и если нет — создаем ее с интервалом в час. Затем через add_action связываем событие с функцией-обработчиком.
Добавление пользовательских интервалов расписания
Стандартно WordPress поддерживает интервалы 'hourly', 'twicedaily' и 'daily'. Если нужна своя периодичность, можно зарегистрировать пользовательский интервал:
function wprus_custom_cron_intervals($schedules) {
$schedules['every_five_minutes'] = array(
'interval' => 300, // 5 минут в секундах
'display' => __('Каждые 5 минут')
);
return $schedules;
}
add_filter('cron_schedules', 'wprus_custom_cron_intervals');
После этого можно использовать новый интервал при планировании задачи:
wp_schedule_event(time(), 'every_five_minutes', 'wprus_five_min_task');
add_action('wprus_five_min_task', 'wprus_handle_five_min_task');
Практические примеры использования WP Cron
Очистка устаревших данных из базы
Допустим, нужно регулярно удалять записи из кастомной таблицы, старше 30 дней. Создаем задачу, которая запускается ежедневно:
function wprus_clear_old_records() {
global $wpdb;
$table = $wpdb->prefix . 'custom_data';
$wpdb->query(
$wpdb->prepare("DELETE FROM $table WHERE created_at < %s", date('Y-m-d H:i:s', strtotime('-30 days')))
);
}
add_action('wprus_daily_cleanup', 'wprus_clear_old_records');
function wprus_schedule_daily_cleanup() {
if (!wp_next_scheduled('wprus_daily_cleanup')) {
wp_schedule_event(time(), 'daily', 'wprus_daily_cleanup');
}
}
add_action('wp', 'wprus_schedule_daily_cleanup');
Автоматическая отправка отчетов по email
Представим, что нужно раз в неделю отправлять администратору отчет по заказам или активности. Для этого создадим еженедельную задачу:
function wprus_send_weekly_report() {
$admin_email = get_option('admin_email');
$subject = 'Еженедельный отчет сайта';
$message = 'Здесь ваш отчет...';
wp_mail($admin_email, $subject, $message);
}
add_action('wprus_weekly_report', 'wprus_send_weekly_report');
function wprus_schedule_weekly_report() {
if (!wp_next_scheduled('wprus_weekly_report')) {
wp_schedule_event(time(), 'weekly', 'wprus_weekly_report');
}
}
add_action('wp', 'wprus_schedule_weekly_report');
// Добавим интервал "weekly"
function wprus_add_weekly_cron_schedule($schedules) {
$schedules['weekly'] = array(
'interval' => 7 * 24 * 60 * 60, // 7 дней
'display' => __('Еженедельно')
);
return $schedules;
}
add_filter('cron_schedules', 'wprus_add_weekly_cron_schedule');
Полезные плагины для управления WP Cron
Если вы хотите контролировать задачи, их запуск и отладку, рекомендуем обратить внимание на следующие плагины:
- WP Crontrol — добавляет интерфейс для просмотра, редактирования и создания задач WP Cron прямо из админки.
- My Popup — полезен для автоматического показа всплывающих окон по расписанию, используя WP Cron.
- Clearfy Pro — оптимизационный плагин, который умеет работать с WP Cron для очистки и оптимизации базы данных.
Отладка и проверка работы WP Cron
Для отладки удобно использовать плагин WP Crontrol, который позволяет:
- Просматривать список всех запланированных задач и их расписание.
- Запускать задачи вручную для проверки работы.
- Удалять или изменять задачи без редактирования кода.
Также можно вручную вызывать обработчик cron из кода, например, для тестов:
do_action('wprus_hourly_task');
Если WP Cron не срабатывает из-за низкого трафика, рекомендуется настроить системный cron на выполнение запроса к файлу wp-cron.php раз в несколько минут:
* * * * * wget -q -O - https://ваш-сайт.ru/wp-cron.php?doing_wp_cron >/dev/null 2>&1
Как отключить WP Cron и использовать системный cron
Для повышения надежности можно отключить встроенный WP Cron и запускать системный. Для этого в wp-config.php добавьте:
define('DISABLE_WP_CRON', true);
После этого настройте системный cron (пример выше) для регулярного вызова wp-cron.php. Это лучший вариант для сайтов с большим трафиком или требующих точного расписания.