Как использовать WordPress Cron для автоматизации задач

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

Что такое WP-Cron и как он работает

WP-Cron — это имитация системного cron, реализованная на уровне PHP. В отличие от классического cron, который запускается сервером по расписанию, WP-Cron срабатывает при загрузке любой страницы сайта. Это значит, что если посещений нет, задачи не выполняются вовремя.

WP-Cron проверяет, не наступило ли время запуска запланированных событий, и если да — запускает их. Это удобно, но может привести к задержкам, если трафик сайта низкий.

Чтобы улучшить надежность выполнения cron-задач, часто отключают WP-Cron и настраивают системный cron на сервере для обращения к скрипту wp-cron.php по расписанию.

Настройка системного cron для запуска WP-Cron

Для отключения встроенного WP-Cron добавьте в wp-config.php:

define('DISABLE_WP_CRON', true);

Далее настроите системный cron (например, в Linux) командой:

* * * * * wget -q -O - https://ваш_сайт.ru/wp-cron.php?doing_wp_cron >/dev/null 2>&1

Это команда будет запускать WP-Cron каждую минуту, что гораздо надежнее, чем ждать загрузки сайта.

Как создавать собственные cron-задачи в WordPress

Для добавления собственной задачи используются функции wp_schedule_event, add_action и wp_clear_scheduled_hook. Рассмотрим пример, где мы будем автоматически удалять старые записи из пользовательской таблицы.

Пример: удаление записей старше 30 дней

1. Регистрируем событие при инициализации темы или плагина:

function wptour_schedule_cleanup() {
    if (!wp_next_scheduled('wptour_cleanup_old_records')) {
        wp_schedule_event(time(), 'daily', 'wptour_cleanup_old_records');
    }
}
add_action('wp', 'wptour_schedule_cleanup');

2. Создаем функцию-обработчик:

function wptour_cleanup_old_records_callback() {
    global $wpdb;
    $table = $wpdb->prefix . 'custom_table';
    $date = date('Y-m-d H:i:s', strtotime('-30 days'));
    $wpdb->query($wpdb->prepare("DELETE FROM $table WHERE created_at < %s", $date));
}
add_action('wptour_cleanup_old_records', 'wptour_cleanup_old_records_callback');

3. При деактивации плагина или темы очищаем расписание:

function wptour_deactivate_cleanup() {
    wp_clear_scheduled_hook('wptour_cleanup_old_records');
}
register_deactivation_hook(__FILE__, 'wptour_deactivate_cleanup');

Так мы гарантируем, что задача запускается ежедневно и удаляет устаревшие данные.

Расширенные интервалы для WP-Cron: добавляем собственные периоды

Стандартные интервалы — hourly, twicedaily, daily. Что делать, если нужна своя периодичность, например, каждые 5 минут?

Для этого нужно добавить в фильтр cron_schedules свои интервалы:

function wptour_add_cron_intervals($schedules) {
    $schedules['every_five_minutes'] = array(
        'interval' => 300,
        'display' => __('Каждые 5 минут')
    );
    return $schedules;
}
add_filter('cron_schedules', 'wptour_add_cron_intervals');

Теперь можно использовать этот интервал при планировании событий:

wp_schedule_event(time(), 'every_five_minutes', 'wptour_cleanup_old_records');

Практические советы по использованию WP-Cron

Мониторинг и отладка cron-задач

Чтобы убедиться, что задачи выполняются, используйте плагин WP Crontrol. Он позволяет просматривать все запланированные события, запускать их вручную и удалять ненужные.

Для логирования выполнения задач можно добавить запись в отдельный файл или использовать стандартный debug.log через error_log.

Избегаем дублирования задач

Обязательно проверяйте наличие запланированного события перед его созданием через wp_next_scheduled, чтобы избежать множества одинаковых задач, которые могут перегрузить сервер.

Оптимизация производительности

Если задача тяжелая, например, импорт/экспорт данных, разбивайте её на части, чтобы не превышать лимиты времени выполнения PHP. Для этого можно ставить несколько мелких задач или использовать transient API для хранения прогресса.

Использование WP-Cron в связке с плагинами WPShop

Для сайтов на WordPress с дополнениями из WPShop, например, при автоматизации обзоров через плагин Expert Review, можно запускать регулярные обновления рейтингов и отзывы по расписанию.

Пример запуска обновления рейтингов каждую ночь:

function wptour_update_reviews() {
    if (function_exists('expert_review_update_all')) {
        expert_review_update_all();
    }
}
add_action('wptour_update_reviews_hook', 'wptour_update_reviews');

function wptour_schedule_review_update() {
    if (!wp_next_scheduled('wptour_update_reviews_hook')) {
        wp_schedule_event(time(), 'daily', 'wptour_update_reviews_hook');
    }
}
add_action('wp', 'wptour_schedule_review_update');

Это позволит поддерживать актуальность данных без ручного вмешательства.

Заключение по работе с WP-Cron

WP-Cron — мощный инструмент для автоматизации рутинных задач в WordPress. Главное — понимать его особенности и ограничения, грамотно планировать задачи и использовать системный cron для надежности. Совмещая это с полезными плагинами, вы сможете значительно расширить функциональность сайта и упростить администрирование.

WooCommerce: как использовать хуки для добавления пользовательских функций
07.05.2026
WooCommerce: как удалить неиспользуемые атрибуты товаров при массовом импорте
13.06.2026
Как использовать WPRemark для автоматического модерирования комментариев в WordPress
11.02.2026
WooCommerce: как правильно отключить AJAX в форме оплаты
30.05.2026
WooCommerce: как добавить собственный тип доставки с условиями
09.06.2026

Уроки со скриншотами, подробные руководства