Что такое WP-Cron и зачем он нужен
WP-Cron — встроенный в WordPress механизм планировщика задач, который позволяет запускать определённые функции в заданное время или с заданным интервалом. Он используется для автоматизации рутинных операций: отправка писем, очистка базы данных, обновление кэша, создание отчетов и прочего. В отличие от системного cron на сервере, WP-Cron работает только при обращении к сайту, что может повлиять на точность и своевременность запуска задач.
Диагностика проблем с WP-Cron
Если вы заметили, что запланированные задачи не выполняются вовремя, проверьте следующие моменты:
- Включён ли WP-Cron? В
wp-config.phpне должна быть установлена константаDISABLE_WP_CRONвtrue. - Есть ли обращения к сайту? WP-Cron запускается только при посещениях сайта, если трафика нет — задачи не выполняются.
- Нет ли конфликтов с плагинами, блокирующими запросы?
- Проверка через плагин WP Crontrol или с помощью функции
wp_get_scheduled_event()позволяет увидеть запланированные задачи и их статусы.
Пошаговое создание собственной периодической задачи с WP-Cron
1. Регистрируем новый интервал (если стандартных не хватает)
add_filter('cron_schedules', function($schedules) {
if (!isset($schedules['every_five_minutes'])) {
$schedules['every_five_minutes'] = [
'interval' => 300, // 300 секунд = 5 минут
'display' => __('Каждые 5 минут')
];
}
return $schedules;
});2. Регистрируем событие при инициализации плагина или темы
function my_custom_cron_activation() {
if (!wp_next_scheduled('my_custom_cron_hook')) {
wp_schedule_event(time(), 'every_five_minutes', 'my_custom_cron_hook');
}
}
add_action('wp', 'my_custom_cron_activation');3. Определяем функцию-обработчик задачи
add_action('my_custom_cron_hook', function() {
// Пример: очистка устаревших записей из таблицы
global $wpdb;
$wpdb->query("DELETE FROM {$wpdb->prefix}my_table WHERE created_at < NOW() - INTERVAL 30 DAY");
});4. Деактивация задачи при деактивации плагина
function my_custom_cron_deactivation() {
$timestamp = wp_next_scheduled('my_custom_cron_hook');
if ($timestamp) {
wp_unschedule_event($timestamp, 'my_custom_cron_hook');
}
}
register_deactivation_hook(__FILE__, 'my_custom_cron_deactivation');Проверка результата после внедрения
- Установите плагин WP Crontrol (https://plugins.trac.wordpress.org/browser/wp-crontrol) для управления и просмотра запланированных задач.
- Проверьте наличие вашего события в разделе «Cron Events».
- Выполните задачу вручную через интерфейс плагина для проверки корректности работы хука и функции.
- В логах сервера или через дебаг вывод отследите выполнение SQL-запроса или другой логики.
Частые ошибки и способы их устранения
- DISABLE_WP_CRON установлена в true: WP-Cron не работает, отключите этот параметр в
wp-config.php. - Отсутствие трафика на сайт: WP-Cron запускается только при обращении к сайту. Для гарантированной работы используйте системный cron с вызовом
wp-cron.php. - Дублирование задач: При неправильной проверке на наличие запланированного события задачи могут накладываться. Всегда проверяйте через
wp_next_scheduled()перед добавлением. - Ошибки в функции обработчике: Внутри хука не должно быть фатальных ошибок, используйте try-catch и логирование.
- Плагины блокируют запросы: Некоторые плагины безопасности блокируют вызовы AJAX или wp-cron, проверьте настройки и исключения.
Практические советы по производительности и безопасности WP-Cron
- Если сайт с низкой посещаемостью, настройте системный cron на сервере, который будет вызывать
wp-cron.phpчерезwgetилиcurlв нужные интервалы. - Минимизируйте время выполнения задач — сложные операции разбивайте на несколько WP-Cron событий.
- Логируйте ошибки в отдельный файл, чтобы оперативно отслеживать сбои.
- Ограничьте права пользователя, под которым запускаются задачи, если используете системный cron для повышения безопасности.
- Используйте плагин Clearfy Pro для оптимизации и контроля фоновых задач (https://wpshop.ru/plugins/clearfy?utm_source=wpma.ru&utm_medium=article&utm_campaign=kak-ispolzovat-wp-cron-dlya-avtomatizacii-zadach-v-wordpress).
Сравнение вариантов запуска WP-Cron
| Метод | Плюсы | Минусы | Когда использовать |
|---|---|---|---|
| Стандартный WP-Cron | Прост в настройке, встроен в WordPress | Зависит от посещаемости сайта, нет точного времени запуска | Сайты с хорошим трафиком |
| Системный cron вызовом wp-cron.php | Точный запуск по расписанию, не зависит от посетителей | Требует доступа к серверу, настройка сложнее | Низкий трафик, критичные задачи |
| Плагины для управления cron (например, WP Crontrol) | Удобный интерфейс, мониторинг задач | Дополнительная нагрузка, может конфликтовать с другими плагинами | Для разработки и отладки |