WordPress изначально использует систему планировщика задач WP-Cron для выполнения отложенных действий. Однако WP-Cron запускается только при посещении сайта, что может привести к задержкам или пропуску задач при низкой посещаемости. В этой статье мы подробно рассмотрим, как настроить надежный отложенный запуск задач в WordPress без зависимости от WP-Cron, используя системный cron и собственные функции с префиксом wordpressy_.
Почему стоит отказаться от стандартного WP-Cron?
WP-Cron запускается автоматически при обращении к сайту, если есть запланированные задачи. Это удобно, но:
- При низкой посещаемости задачи могут выполняться с задержкой или вообще не запускаться.
- На сайтах с высокой нагрузкой WP-Cron может запускаться слишком часто, создавая дополнительную нагрузку.
- Отсутствует точное расписание — запуск происходит не по точному времени, а при первом запросе после запланированного времени.
Поэтому для серьезных проектов рекомендуется отключать WP-Cron и запускать задачи через системный cron по расписанию.
Отключение WP-Cron и настройка системного cron
Для начала отключим стандартный WP-Cron, добавив в wp-config.php следующую строку:
define('DISABLE_WP_CRON', true);
Теперь необходимо настроить системный cron. Для этого выполните команду на сервере (пример для запуска задач каждую минуту):
* * * * * wget -q -O - https://ваш-сайт.ru/wp-cron.php?doing_wp_cron >/dev/null 2>&1
Или с помощью curl:
* * * * * curl -s https://ваш-сайт.ru/wp-cron.php?doing_wp_cron >/dev/null 2>&1
Это гарантирует запуск запланированных задач по расписанию, независимо от посещаемости сайта.
Создание собственной задачи с отложенным запуском
Рассмотрим пример создания кастомной задачи, которая будет выполняться каждые 5 минут. Реализуем функцию wordpressy_custom_task, которая будет выводить лог в файл для демонстрации.
Регистрация задачи в WordPress
Добавим следующий код в файл плагина или functions.php темы:
function wordpressy_schedule_custom_task() {
if (!wp_next_scheduled('wordpressy_custom_task_hook')) {
wp_schedule_event(time(), 'five_minutes', 'wordpressy_custom_task_hook');
}
}
add_action('wp', 'wordpressy_schedule_custom_task');
Обратите внимание, что стандартные интервалы WP-Cron не включают 5 минут, поэтому создадим свой интервал:
function wordpressy_custom_cron_intervals($schedules) {
if (!isset($schedules['five_minutes'])) {
$schedules['five_minutes'] = array(
'interval' => 300, // 300 секунд = 5 минут
'display' => __('Каждые 5 минут')
);
}
return $schedules;
}
add_filter('cron_schedules', 'wordpressy_custom_cron_intervals');
Обработчик задачи
Теперь определим функцию, которая будет выполняться по расписанию:
function wordpressy_custom_task() {
$log_file = WP_CONTENT_DIR . '/wordpressy-cron.log';
$current_time = date('Y-m-d H:i:s');
file_put_contents($log_file, "[{$current_time}] Задача wordpressy_custom_task выполнена\n", FILE_APPEND);
}
add_action('wordpressy_custom_task_hook', 'wordpressy_custom_task');
Проверка и отладка задач
Чтобы убедиться, что задачи работают корректно, проверьте наличие файла wordpressy-cron.log в папке wp-content и убедитесь, что в нем появляются новые записи с отметками времени.
Для управления задачами можно использовать плагины, например WP Crontrol, который позволяет просматривать и редактировать запланированные задачи через админку.
Дополнительные советы по надежному запуску задач
1. Минимизируйте нагрузку задач: выполняйте только необходимые операции, разбивайте тяжелые задачи на части.
2. Обрабатывайте ошибки: добавляйте обработку исключений внутри функций задач, чтобы не прерывать выполнение других cron-задач.
3. Используйте собственные хуки: выносите код задач в отдельные функции с уникальными префиксами, чтобы избежать конфликтов.
Заключение
Отказ от стандартного WP-Cron и переход на системный cron с кастомными задачами позволяет получать стабильное и своевременное выполнение отложенных процессов в WordPress. В статье мы рассмотрели, как отключить WP-Cron, настроить системный cron, создать собственный интервал и обработчик задачи с префиксом wordpressy_. Такой подход особенно полезен на проектах с высокой нагрузкой или когда важна точность запуска фоновых процессов.
Если хотите расширить функционал сайта, рекомендуем ознакомиться с плагином Clearfy Pro для оптимизации и управления задачами WordPress.