В WordPress встроенная система WP-Cron отвечает за выполнение запланированных задач, таких как публикация отложенных постов, проверка обновлений или выполнение заданий плагинов. Однако по умолчанию WP-Cron запускается при каждом заходе посетителя на сайт, что не всегда удобно и может приводить к нагрузке или задержкам в выполнении задач. Особенно это актуально для сайтов на WPengine, где важно оптимизировать ресурсы и избежать лишних запросов.
Что такое отложенный запуск WP-Cron и зачем он нужен
Отложенный запуск (delayed cron) позволяет контролировать время выполнения cron задач, отключить автоматический запуск при каждом визите и запускать задачи по расписанию с помощью системных планировщиков, например, системного cron на сервере. Это повышает стабильность и производительность сайта, снижает нагрузку на PHP и базу данных.
На WPengine вы не всегда можете настроить системный cron напрямую, поэтому нужно использовать альтернативные методы отложенного запуска, которые совместимы с хостингом и обеспечивают надежное выполнение задач.
Проблемы стандартного WP-Cron
- Запуск только при посещении сайта, что не гарантирует своевременное выполнение
- Высокая нагрузка при большом трафике из-за многократных запусков
- Проблемы с задачами, требующими точного времени выполнения
Как отключить автозапуск WP-Cron и настроить отложенный запуск на WPengine
Первый шаг – отключить стандартный запуск WP-Cron, добавив в wp-config.php следующую строку:
define('DISABLE_WP_CRON', true);
Это предотвратит автоматический запуск cron при каждом заходе пользователя.
Далее мы можем использовать системный cron или альтернативные решения для запуска wp-cron.php с нужным интервалом.
Настройка системного cron (если доступен)
Если у вас есть доступ к crontab на сервере, добавьте задачу, которая будет запускать WP-Cron, например, раз в 15 минут:
*/15 * * * * wget -q -O - https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
Замените https://example.com на адрес вашего сайта. Это самый надежный способ отложенного запуска.
Альтернативный способ – запуск через HTTP-запрос с помощью плагина
Если доступ к серверному cron отсутствует, можно использовать плагин, который будет запускать задачи с задержкой или через AJAX, например, Clearfy Pro. Плагин позволяет настраивать интервалы запуска и отключать автозапуск WP-Cron.
Пример кастомного решения для отложенного запуска WP-Cron на WPengine
Рассмотрим пример кода, который отключает стандартный WP-Cron и реализует запуск задач через AJAX с задержкой.
1. Отключаем WP-Cron в wp-config.php
define('DISABLE_WP_CRON', true);
2. Добавляем AJAX-хук для запуска cron
add_action('wp_ajax_wpengine_run_cron', 'wpengine_run_cron_function');
add_action('wp_ajax_nopriv_wpengine_run_cron', 'wpengine_run_cron_function');
function wpengine_run_cron_function() {
if (!defined('DOING_CRON')) {
define('DOING_CRON', true);
}
require_once ABSPATH . 'wp-cron.php';
wpengine_send_json_success('Cron запущен успешно');
}
function wpengine_send_json_success($message) {
wp_send_json_success(array('message' => $message));
}
3. Вставляем JavaScript для вызова AJAX с задержкой
add_action('wp_footer', 'wpengine_enqueue_cron_script');
function wpengine_enqueue_cron_script() {
?>
<script>
setTimeout(function() {
var xhr = new XMLHttpRequest();
xhr.open('POST', '<?php echo admin_url('admin-ajax.php'); ?>');
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.send('action=wpengine_run_cron');
}, 900000); // 15 минут задержка
</script>
<?php
}
Этот код запускает WP-Cron через AJAX спустя 15 минут после загрузки страницы, что снижает нагрузку и распределяет вызовы.
Советы по мониторингу и отладке отложенного WP-Cron на WPengine
Чтобы убедиться, что задачи запускаются корректно, используйте плагины мониторинга, например, WP Crontrol или Expert Review для анализа cron задач и логов.
Также можно добавить логирование в функцию запуска cron, чтобы фиксировать время и результаты выполнения.
Выводы и рекомендации
Отложенный запуск WP-Cron на WPengine позволяет существенно повысить стабильность и производительность сайта. Отключение автоматического запуска и использование системного cron или AJAX-запуска с задержкой – лучшие практики для профессиональных проектов. Если системный cron недоступен, используйте описанный AJAX метод или специализированные плагины, например, Clearfy Pro.
Обязательно тестируйте и мониторьте выполнение задач, чтобы избежать сбоев и пропуска важных процессов.