В WordPress встроена система планировщика заданий под названием WP-Cron, которая отвечает за выполнение отложенных задач, таких как публикация запланированных постов, очистка кеша, отправка email и другие автоматические процессы. Однако по умолчанию WP-Cron запускается при каждом обращении к сайту, что может привести к задержкам и проблемам с производительностью, особенно на сайтах с низким трафиком или при частых задачах.
Что такое WP-Cron и зачем нужен отложенный запуск задач
WP-Cron — это имитация системного cron, реализованная на PHP и интегрированная в ядро WordPress. Она позволяет запускать задачи по расписанию без доступа к серверному cron. Однако из-за особенностей работы (запуск только при посещении сайта) выполнение задач может быть нерегулярным и с задержками.
Отложенный запуск задач — это возможность запускать определённые процессы в WordPress не сразу, а через заданный промежуток времени или по расписанию. Это помогает распределить нагрузку, избежать конфликтов и обеспечить своевременное выполнение важных операций.
Для профессиональной работы с WP-Cron рекомендуется отключить встроенный запуск и настроить системный cron на сервере либо использовать специальные плагины, которые оптимизируют и контролируют выполнение задач.
Отключение встроенного WP-Cron и настройка системного cron
Первым шагом для улучшения работы отложенных задач является отключение стандартного запуска WP-Cron при каждом запросе. Для этого в wp-config.php добавьте строку:
define('DISABLE_WP_CRON', true);После этого WP-Cron перестанет запускаться при посещении сайта, и потребуется настроить системный cron на сервере, который будет вызывать WP-Cron по расписанию.
Для запуска WP-Cron из командной строки можно использовать следующий вызов:
wget -q -O - https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1Или, если доступен PHP CLI:
php /путь/к/сайту/wp-cron.phpПример записи в crontab для запуска WP-Cron каждую минуту:
* * * * * wget -q -O - https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1Это обеспечит регулярное и стабильное выполнение запланированных задач вне зависимости от посещаемости сайта.
Программное создание и управление отложенными задачами с помощью WP-Cron
Для добавления собственных отложенных задач в WordPress используется функция wp_schedule_event(). Ниже приведён пример создания задачи, которая будет выполняться каждый час.
function wpfinder_schedule_hourly_task() {
if ( ! wp_next_scheduled( 'wpfinder_hourly_event' ) ) {
wp_schedule_event( time(), 'hourly', 'wpfinder_hourly_event' );
}
}
add_action( 'wp', 'wpfinder_schedule_hourly_task' );
function wpfinder_do_hourly_task() {
// Здесь код задачи
error_log('Выполнена ежечасная задача WPFinder');
}
add_action( 'wpfinder_hourly_event', 'wpfinder_do_hourly_task' );В этом примере при первом запуске проверяется, есть ли уже запланированное событие с именем wpfinder_hourly_event. Если нет — оно создаётся с интервалом в час. Затем к событию привязывается функция, которая будет выполняться по расписанию.
Если нужно отменить задачу, используется функция wp_clear_scheduled_hook():
wp_clear_scheduled_hook('wpfinder_hourly_event');Регистрация пользовательских интервалов для WP-Cron
По умолчанию WordPress поддерживает интервалы: hourly (часовой), twicedaily (2 раза в день), daily (ежедневно). Для кастомных интервалов нужно добавить их через фильтр:
function wpfinder_custom_cron_intervals( $schedules ) {
$schedules['every_five_minutes'] = array(
'interval' => 300, // 300 секунд = 5 минут
'display' => 'Каждые 5 минут'
);
return $schedules;
}
add_filter( 'cron_schedules', 'wpfinder_custom_cron_intervals' );Теперь можно использовать интервал 'every_five_minutes' при планировании задачи.
Полезные плагины для управления WP-Cron и отложенными задачами
Для удобства работы с WP-Cron и мониторинга запланированных задач можно использовать следующие плагины:
- WP Crontrol — позволяет просматривать, редактировать и удалять запланированные события через админку WordPress. Очень полезен для отладки и управления задачами.
- Advanced Cron Manager — расширенный менеджер cron задач с удобным интерфейсом и дополнительными возможностями.
- Clearfy Pro — плагин для оптимизации WordPress, в том числе содержит функции управления WP-Cron и отключения ненужных задач для ускорения сайта. Подробнее о Clearfy Pro на wpshop.ru.
Практические советы по оптимизации отложенных задач в WordPress
Чтобы WP-Cron работал эффективно, учитывайте следующие моменты:
- Отключайте встроенный WP-Cron и используйте системный cron для стабильности.
- Не создавайте слишком частые задачи без необходимости — это нагрузит сервер.
- Используйте уникальные имена для своих событий, чтобы избежать конфликтов.
- Проверяйте работу задач через логи или плагины мониторинга.
- При большом количестве задач разбивайте их на логические части и распределяйте во времени.
Также рекомендуем периодически очищать устаревшие или неиспользуемые задачи, чтобы не загромождать планировщик.
Пример создания отложенной задачи с передачей параметров
Иногда нужно передать в задачу параметры. WP-Cron поддерживает это через функцию wp_schedule_single_event() или wp_schedule_event() с массивом аргументов:
function wpfinder_schedule_custom_task( $post_id ) {
if ( ! wp_next_scheduled( 'wpfinder_custom_task_event', array( $post_id ) ) ) {
wp_schedule_single_event( time() + 300, 'wpfinder_custom_task_event', array( $post_id ) );
}
}
add_action( 'wpfinder_custom_task_event', 'wpfinder_handle_custom_task' );
function wpfinder_handle_custom_task( $post_id ) {
// Логика обработки для $post_id
error_log('Обработка поста с ID: ' . $post_id);
}В этом примере задача запускается один раз через 5 минут с передачей ID поста для дальнейшей обработки.