WP-Cron — встроенный механизм планирования задач в WordPress, который отвечает за выполнение различных фоновых процессов: публикацию отложенных записей, проверку обновлений, очистку кэша и многое другое. Несмотря на удобство, стандартная реализация WP-Cron часто становится причиной замедления сайта, особенно при высоких нагрузках или на слабом хостинге. В этой статье разберём, как правильно оптимизировать WP-Cron для повышения производительности вашего WordPress-сайта, а также приведём примеры кода и рекомендации по плагинам.
Что такое WP-Cron и почему он влияет на скорость сайта
WP-Cron запускается при каждом посещении сайта и проверяет, есть ли запланированные задачи. Если такие задачи есть, он выполняет их. Такой подход удобен, но имеет ряд недостатков:
- Если на сайт мало трафика, задачи могут запускаться с задержкой.
- При большом количестве задач WP-Cron может «нагружать» сервер, вызывая замедления.
- Каждый запуск WP-Cron — отдельный PHP-запрос, который увеличивает время отклика.
Поэтому оптимизация WP-Cron — важный шаг для ускорения WordPress, особенно на сайтах с большим количеством запланированных задач или плагинами, активно использующими планировщик.
Отключение стандартного WP-Cron и настройка системного cron
Почему стоит отключить стандартный WP-Cron
По умолчанию WP-Cron запускается при каждом посещении сайта, что неэффективно. Лучше отключить его и настроить системный cron на сервере, который будет запускать WP-Cron с нужной периодичностью. Это уменьшит нагрузку и повысит стабильность выполнения задач.
Как отключить WP-Cron в WordPress
Отключите WP-Cron, добавив в wp-config.php следующую строку:
define('DISABLE_WP_CRON', true);Это остановит автоматический запуск cron при посещениях сайта.
Настройка системного cron на Linux-сервере
Добавьте задачу в cron, чтобы запускать WP-Cron каждые 5 минут. Для этого выполните команду crontab -e и добавьте строку:
*/5 * * * * wget -q -O - https://ваш-сайт.ru/wp-cron.php?doing_wp_cron >/dev/null 2>&1Или, если доступна команда curl:
*/5 * * * * curl -s https://ваш-сайт.ru/wp-cron.php?doing_wp_cron >/dev/null 2>&1Это будет гарантировать запуск WP-Cron ровно каждые 5 минут, независимо от посещаемости сайта.
Оптимизация задач WP-Cron: проверка и удаление лишних событий
Как посмотреть запланированные задачи
Для анализа задач можно использовать плагин WP Crontrol. Он позволяет просматривать, редактировать и удалять события WP-Cron прямо из админки.
После установки плагина перейдите в Инструменты –> Cron Events и оцените список задач. Обратите внимание на слишком частые или повторяющиеся задачи, которые могут быть лишними.
Удаление лишних или конфликтующих cron-событий
Если вы обнаружили избыточные или конфликтующие задачи, удалите их с помощью плагина или кодом:
function wpspeed_remove_unwanted_cron_events() {
$timestamp = wp_next_scheduled('some_hook');
if ($timestamp) {
wp_unschedule_event($timestamp, 'some_hook');
}
}
add_action('init', 'wpspeed_remove_unwanted_cron_events');Замените 'some_hook' на имя хука, который хотите удалить.
Оптимизация интервалов запуска задач
Иногда плагины создают задачи с очень частым повтором, например, каждую минуту. Это может перегружать сервер. Можно увеличить интервал, воспользовавшись фильтром cron_schedules:
function wpspeed_custom_cron_intervals($schedules) {
$schedules['every_five_minutes'] = array(
'interval' => 300,
'display' => __('Каждые 5 минут')
);
return $schedules;
}
add_filter('cron_schedules', 'wpspeed_custom_cron_intervals');Далее используйте этот интервал для ваших задач.
Пример: создание собственной оптимизированной задачи WP-Cron
Допустим, нам нужно регулярно очищать transient-кэш, чтобы не накапливался мусор. Создадим задачу, которая будет запускаться раз в 6 часов.
function wpspeed_schedule_clear_transients() {
if (!wp_next_scheduled('wpspeed_clear_transients_hook')) {
wp_schedule_event(time(), 'six_hours', 'wpspeed_clear_transients_hook');
}
}
add_action('wp', 'wpspeed_schedule_clear_transients');
function wpspeed_clear_transients() {
global $wpdb;
$wpdb->query("DELETE FROM $wpdb->options WHERE option_name LIKE '_transient_%' OR option_name LIKE '_site_transient_%'");
}
add_action('wpspeed_clear_transients_hook', 'wpspeed_clear_transients');
function wpspeed_add_six_hours_interval($schedules) {
$schedules['six_hours'] = array(
'interval' => 21600, // 6 часов в секундах
'display' => __('Раз в 6 часов')
);
return $schedules;
}
add_filter('cron_schedules', 'wpspeed_add_six_hours_interval');Так мы создадим задачу, которая не будет перегружать сервер и будет работать стабильно.
Плагины для управления и оптимизации WP-Cron
Для упрощения работы с WP-Cron и его оптимизации рекомендуем использовать проверенные плагины:
- WP Crontrol — просмотр и управление cron-событиями.
- Advanced Cron Manager — расширенное управление задачами.
- Clearfy Pro (https://wpshop.ru/clearfy-pro/?utm_source=wpspeed.ru&utm_medium=article&utm_campaign=optimizing-wp-cron-for-speed) — включает оптимизацию WP-Cron и другие инструменты ускорения сайта.
Эти инструменты помогут выявить проблемные задачи, настроить интервалы и выполнить чистку ненужных событий.
Дополнительные советы по оптимизации WP-Cron
Для максимальной эффективности используйте следующие рекомендации:
- Отключайте WP-Cron на сайтах с низким трафиком и настраивайте системный cron.
- Избегайте задач с интервалом менее 5 минут, если это не критично.
- Регулярно проверяйте список запланированных задач и удаляйте устаревшие.
- Минимизируйте количество сторонних плагинов, регулярно использующих WP-Cron.
- Для сайтов с высокими нагрузками рассмотрите альтернативы WP-Cron, например, внешние сервисы cron.