wpcoding.ru wordpress WP Coding

Как использовать WP-Cron для отложенных задач в WordPress

Что такое WP-Cron и зачем он нужен

WP-Cron — встроенный механизм планирования задач в WordPress, позволяющий запускать события в заданное время или с определённым интервалом. В отличие от системных cron-задач, WP-Cron запускается при заходе посетителя на сайт, что может приводить к задержкам или несвоевременному выполнению задач.

Типичные задачи для WP-Cron: очистка кеша, отправка уведомлений, импорт/экспорт данных, обновление статистики, публикация отложенных постов.

Диагностика проблем с WP-Cron

Проверка работы WP-Cron

Выполните запрос в браузере или через терминал:

curl -I https://example.com/wp-cron.php?doing_wp_cron

Ответ должен быть 200 OK. Если приходит ошибка 404 или 403 — значит, вызов WP-Cron заблокирован или неправильно настроен.

Проверка зарегистрированных событий WP-Cron

Добавьте в файл functions.php темы или в плагин следующий код для вывода списка задач:

add_action('admin_notices', function() {
    if (!current_user_can('manage_options')) return;
    $crons = _get_cron_array();
    echo '<pre>';
    print_r($crons);
    echo '</pre>';
});

Перейдите в админку: увидите список запланированных задач и время их срабатывания.

Пошаговое решение: правильная настройка WP-Cron

1. Отключение встроенного WP-Cron

Для сайтов с высокой нагрузкой или на VPS рекомендуется отключить стандартный WP-Cron и запускать системный cron.

define('DISABLE_WP_CRON', true);

Добавьте эту строку в wp-config.php до строки /* That's all, stop editing! Happy blogging. */.

2. Настройка системного cron

Добавьте в crontab задачу, которая будет запускать WP-Cron каждые 5 минут:

*/5 * * * * wget -q -O - 'https://example.com/wp-cron.php?doing_wp_cron' >/dev/null 2>&1

Или через curl:

*/5 * * * * curl -s 'https://example.com/wp-cron.php?doing_wp_cron' >/dev/null 2>&1

3. Создание пользовательской задачи WP-Cron

Пример регистрации пользовательского события, выполняющего очистку временных данных:

function my_custom_cron_job() {
    global $wpdb;
    $wpdb->query("DELETE FROM wp_options WHERE option_name LIKE '_transient_%' AND option_name NOT LIKE '_transient_timeout_%'");
}

add_action('my_hourly_cleanup', 'my_custom_cron_job');

// Регистрируем событие при активации темы или плагина
if (!wp_next_scheduled('my_hourly_cleanup')) {
    wp_schedule_event(time(), 'hourly', 'my_hourly_cleanup');
}

Проверка результата после внедрения

1. Проверьте, что в wp-config.php прописан DISABLE_WP_CRON при использовании системного cron.

2. Убедитесь, что системный cron выполняется — в логах сервера должна появляться активность по вызову wp-cron.php.

3. Используйте плагин WP Crontrol для просмотра и управления задачами cron прямо из админки.

4. Для ручного запуска всех задач WP-Cron через WP-CLI:

wp cron event run --all

Частые ошибки и как их исправить

  • Ошибка 403/404 при вызове wp-cron.php — проверьте настройки .htaccess и файрвола, убедитесь, что URL доступен.
  • Задачи не выполняются вовремя — отключите встроенный WP-Cron и настройте системный cron.
  • Дублирование задач — проверяйте, что событие не регистрируется несколько раз (используйте wp_next_scheduled()).
  • Избыточная нагрузка из-за частых вызовов WP-Cron — увеличьте интервал запуска или переключитесь на системный cron.

Практические советы по безопасности и производительности

  • Запускайте системный cron вместо встроенного WP-Cron на высоконагруженных сайтах.
  • Ограничьте доступ к wp-cron.php по IP или через .htaccess, если используете внешние вызовы.
  • Используйте WP Crontrol для мониторинга и удаления ненужных или устаревших задач.
  • Оптимизируйте пользовательские задачи, чтобы они не блокировали выполнение — например, делите большие операции на части.

Сравнение способов запуска WP-Cron

СпособПлюсыМинусы
Встроенный WP-CronПрост в настройке, не требует доступа к серверуЗависит от посещаемости сайта, задержки в выполнении задач
Системный cronТочный запуск, надежность, подходит для больших сайтовТребует доступа к серверу и навыков настройки
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше