Автоматизация рутинных задач в WordPress — важный инструмент для оптимизации работы сайта и повышения эффективности. Если вы хотите выполнять определённые действия через регулярные интервалы времени, например, очищать кэш, отправлять отчёты или обновлять данные, то WP-Cron — встроенная система планирования заданий в WordPress — станет вашим помощником.
Что такое WP-Cron и зачем он нужен в WordPress
WP-Cron — это механизм, который имитирует поведение стандартного системного планировщика cron на серверах Linux. Однако в WordPress он запускается не по расписанию сервера, а при каждом заходе пользователя на сайт, проверяя, не пришло ли время выполнить запланированное действие.
Такой подход имеет свои плюсы и минусы. С одной стороны, он не требует настройки сервера, что удобно для большинства пользователей. С другой — если на сайт долго не заходят пользователи, задания могут не выполняться вовремя. Тем не менее, для большинства задач WP-Cron подходит отлично.
Примеры задач, которые удобно автоматизировать с помощью WP-Cron:
- Очистка временных данных и кеша
- Отправка рассылок и уведомлений
- Автоматическое обновление внешних данных
- Создание резервных копий и другие сервисные задачи
Основные функции для работы с WP-Cron
Для взаимодействия с WP-Cron WordPress предоставляет набор функций. Рассмотрим ключевые из них:
wpgenerate_schedule_event()— наша функция для добавления нового задания в расписание.wpgenerate_cron_hook()— функция-обработчик, которая вызывается по расписанию.wp_schedule_event()— стандартная функция WP для регистрации периодического события.wp_clear_scheduled_hook()— удаляет запланированное событие.
Далее мы подробно разберём, как их использовать на практике.
Как создать собственное периодическое задание с WP-Cron
Создадим пример: пусть нам нужно выполнять функцию очистки временных файлов каждые 12 часов.
Шаг 1. Добавляем интервал 12 часов в расписание
По умолчанию WordPress поддерживает интервалы: hourly, twicedaily, daily. Для 12 часов подойдёт twicedaily, но если нужен свой уникальный интервал, можно добавить его так:
add_filter('cron_schedules', 'wpgenerate_add_custom_cron_interval');
function wpgenerate_add_custom_cron_interval($schedules) {
if (!isset($schedules['twelve_hours'])) {
$schedules['twelve_hours'] = array(
'interval' => 12 * 60 * 60, // 12 часов в секундах
'display' => __('Каждые 12 часов')
);
}
return $schedules;
}Шаг 2. Регистрируем задание при активации плагина или темы
Чтобы добавить задание в расписание, используем функцию wp_schedule_event(). Делать это нужно так, чтобы не создавать дубликаты:
function wpgenerate_schedule_event() {
if (!wp_next_scheduled('wpgenerate_twice_daily_event')) {
wp_schedule_event(time(), 'twelve_hours', 'wpgenerate_twice_daily_event');
}
}
add_action('wp', 'wpgenerate_schedule_event');Здесь 'wpgenerate_twice_daily_event' — уникальное имя нашего события.
Шаг 3. Создаём функцию-обработчик события
Теперь нужно связать событие с функцией, которая будет выполняться по расписанию:
add_action('wpgenerate_twice_daily_event', 'wpgenerate_clear_temp_files');
function wpgenerate_clear_temp_files() {
// Здесь логика очистки временных файлов
$temp_dir = wp_upload_dir()['basedir'] . '/temp/';
if (is_dir($temp_dir)) {
$files = glob($temp_dir . '*');
foreach ($files as $file) {
if (is_file($file)) {
unlink($file);
}
}
}
}Таким образом, каждые 12 часов будет запускаться функция очистки временных файлов.
Как проверить и отладить WP-Cron задания
WP-Cron запускается при заходе пользователей, поэтому для сайтов с небольшой посещаемостью задания могут запускаться с задержкой. Чтобы убедиться, что задание зарегистрировано и выполняется, можно использовать следующие методы:
- Плагин WP Crontrol — позволяет просматривать, изменять и запускать задания вручную.
- Выводить логи выполнения с помощью функции
error_log()внутри обработчика. - Для отладки можно принудительно запустить задание с помощью PHP-кода:
do_action('wpgenerate_twice_daily_event');
Если задания не выполняются, проверьте, что в настройках сервера не отключен wp-cron.php, и что нет конфликтов с другими плагинами.
Как удалить или изменить расписание задания
Если нужно остановить выполнение задания, используйте функцию wp_clear_scheduled_hook():
function wpgenerate_clear_scheduled_event() {
wp_clear_scheduled_hook('wpgenerate_twice_daily_event');
}
// Можно привязать к деактивации плагина
register_deactivation_hook(__FILE__, 'wpgenerate_clear_scheduled_event');Для изменения интервала достаточно зарегистрировать новое расписание и очистить старое событие, затем поставить новое.
Примеры полезных автоматических заданий с WP-Cron
Автоматическая очистка базы данных от ревизий и спама
Регулярная очистка базы данных помогает ускорить сайт и снизить нагрузку. Пример кода:
add_action('wpgenerate_cleanup_database_event', 'wpgenerate_cleanup_database');
function wpgenerate_cleanup_database() {
global $wpdb;
$wpdb->query("DELETE FROM {$wpdb->posts} WHERE post_type = 'revision'");
$wpdb->query("DELETE FROM {$wpdb->comments} WHERE comment_approved = 'spam'");
}Такую функцию можно запускать раз в неделю.
Автоматическая отправка email-отчётов
Если на сайте собираются статистические данные, можно настроить регулярную отправку отчётов администраторам.
add_action('wpgenerate_send_report_event', 'wpgenerate_send_report');
function wpgenerate_send_report() {
$to = get_option('admin_email');
$subject = 'Еженедельный отчет сайта';
$message = 'Статистика за неделю: ...';
wp_mail($to, $subject, $message);
}Автоматическое обновление внешних данных
Если сайт интегрируется с внешними API, WP-Cron поможет обновлять данные без ручного вмешательства.
add_action('wpgenerate_update_external_data_event', 'wpgenerate_update_external_data');
function wpgenerate_update_external_data() {
$response = wp_remote_get('https://api.example.com/data');
if (is_wp_error($response)) {
return;
}
$data = json_decode(wp_remote_retrieve_body($response), true);
// Обработка и сохранение данных
}Заключение
WP-Cron — мощный инструмент для автоматизации задач на WordPress. Правильно настроенный, он позволяет разгрузить администраторов и повысить стабильность работы сайта. Главное — подходить к созданию заданий тщательно, учитывать особенности запуска WP-Cron и использовать проверенные методы для отладки и контроля.