Автоматизация рутинных задач — важная часть управления сайтом на WordPress. Встроенная система WP-Cron позволяет запускать запланированные действия без привлечения сторонних инструментов и серверных cron. В этой статье подробно разберём, как создавать, настраивать и отлаживать автоматические задачи с помощью WP-Cron, а также рассмотрим практические примеры и полезные плагины.
Что такое WP-Cron и как он работает
WP-Cron — это имитация системного cron, реализованная внутри WordPress. Он запускает запланированные события при посещении сайта пользователями. Это удобно, но имеет свои особенности:
- Задачи выполняются только при обращении к сайту;
- Планировщик может «запаздывать» при низкой посещаемости;
- Не подходит для точного тайминга, но отлично справляется с периодическими задачами.
WP-Cron хранит расписание задач в базе данных в таблице wp_options в параметре cron. Каждая задача имеет имя, время запуска и callback-функцию.
Как создать собственное запланированное событие в WordPress
Для создания своей задачи нужно выполнить несколько шагов:
- Определить функцию, которая будет выполняться;
- Зарегистрировать событие с помощью
wp_schedule_event; - Привязать функцию к событию через хук
add_action; - При необходимости — удалить задачу.
Пример: ежедневная очистка устаревших данных
function wpmax_daily_cleanup() {
global $wpdb;
$table = $wpdb->prefix . 'wpmax_data';
$wpdb->query("DELETE FROM $table WHERE created_at < NOW() - INTERVAL 30 DAY");
}
add_action('wpmax_daily_cleanup_hook', 'wpmax_daily_cleanup');
function wpmax_schedule_daily_cleanup() {
if (!wp_next_scheduled('wpmax_daily_cleanup_hook')) {
wp_schedule_event(time(), 'daily', 'wpmax_daily_cleanup_hook');
}
}
add_action('wp', 'wpmax_schedule_daily_cleanup');
В этом примере мы создали функцию wpmax_daily_cleanup, которая удаляет записи старше 30 дней из пользовательской таблицы. Затем назначили эту функцию на хук wpmax_daily_cleanup_hook. А в функции wpmax_schedule_daily_cleanup мы проверяем, запланирована ли уже задача, и если нет — добавляем её в расписание с интервалом daily.
Как добавить собственный интервал для WP-Cron
По умолчанию WordPress поддерживает только интервалы hourly (часовой), twicedaily (два раза в день) и daily (ежедневно). Если нужна своя периодичность, можно добавить её через фильтр cron_schedules.
Пример: добавим интервал в 15 минут
function wpmax_custom_cron_intervals($schedules) {
$schedules['every_fifteen_minutes'] = [
'interval' => 15 * 60, // 15 минут в секундах
'display' => __('Каждые 15 минут')
];
return $schedules;
}
add_filter('cron_schedules', 'wpmax_custom_cron_intervals');
Теперь при регистрации события можно использовать этот интервал:
wp_schedule_event(time(), 'every_fifteen_minutes', 'wpmax_some_custom_hook');
Отладка WP-Cron: как проверить и запускать задачи вручную
Поскольку WP-Cron запускается при посещении сайта, в локальной среде или при низком трафике задачи могут не выполняться вовремя. Для отладки и контроля можно использовать несколько способов.
Проверка запланированных задач
Для просмотра всех запланированных событий удобно использовать плагин WP Crontrol. Он позволяет:
- просматривать все задачи и их расписание;
- удалять и редактировать задачи;
- запускать задачи вручную.
Вызов WP-Cron вручную
Если нужно запустить все запланированные задачи без посещения сайта, можно вызвать cron вручную через системный cron (рекомендуется для живых сайтов):
wget -q -O - https://your-site.ru/wp-cron.php?doing_wp_cron >/dev/null 2>&1
Или настроить в wp-config.php отключение встроенного WP-Cron и запускать системный cron отдельно:
define('DISABLE_WP_CRON', true);
Использование плагинов для расширенной работы с WP-Cron
Кроме WP Crontrol, есть и другие полезные инструменты для работы с автоматическими задачами:
- Clearfy Pro — содержит оптимизации и улучшения работы WP-Cron, позволяя снизить нагрузку и повысить стабильность планировщика. Подробнее на wpshop.ru.
- WP Crontrol — для управления расписанием и отладки.
Удаление и очистка запланированных задач
Если задача больше не нужна, важно её удалить, чтобы не засорять расписание и не создавать лишнюю нагрузку.
Пример удаления запланированной задачи
function wpmax_clear_scheduled_tasks() {
$timestamp = wp_next_scheduled('wpmax_daily_cleanup_hook');
if ($timestamp) {
wp_unschedule_event($timestamp, 'wpmax_daily_cleanup_hook');
}
}
add_action('switch_theme', 'wpmax_clear_scheduled_tasks');
Выше пример удаления задачи при смене темы — полезно для чистоты кода.
Резюме и рекомендации по работе с WP-Cron
WP-Cron — мощный инструмент для автоматизации задач в WordPress, но требует понимания особенностей работы. Для стабильности лучше:
- Добавлять свои интервалы при необходимости;
- Использовать проверку
wp_next_scheduledперед добавлением новых задач; - Отлаживать с помощью плагина WP Crontrol;
- При высокой нагрузке запускать WP-Cron через системный cron;
- Удалять ненужные задачи для оптимизации.
Применяя эти методы, вы сможете успешно автоматизировать очистку базы, отправку писем, обновление кеша и другие задачи без лишних плагинов и сложных настроек.