Как использовать WP-Cron для автопубликации постов в WordPress

Диагностика задачи: зачем нужна автопубликация в WordPress

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

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

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

Для автопубликации постов WP-Cron можно использовать, чтобы проверять, есть ли запланированные записи и менять их статус с future на publish.

Пошаговое решение: автопубликация постов с помощью WP-Cron

1. Отключаем стандартный WP-Cron для надежности

В wp-config.php добавьте эту строку, чтобы отключить запуск WP-Cron при каждом заходе на сайт:

define('DISABLE_WP_CRON', true);

2. Настраиваем системный cron на сервере

Добавьте в crontab (через SSH) задачу, которая будет запускать cron WordPress раз в 5 минут:

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

Замените https://example.com на ваш домен.

3. Создаем функцию для автопубликации постов со статусом future

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

function wptemy_autopublish_future_posts() {
    $args = [
        'post_status' => 'future',
        'post_type' => 'post',
        'posts_per_page' => -1,
        'date_query' => [
            [
                'before' => current_time('mysql'),
            ],
        ],
    ];
    $future_posts = get_posts($args);

    if (!empty($future_posts)) {
        foreach ($future_posts as $post) {
            // Меняем статус на 'publish'
            wp_publish_post($post->ID);
        }
    }
}
add_action('wptemy_cron_autopublish', 'wptemy_autopublish_future_posts');

4. Регистрируем собственное событие WP-Cron

Добавьте код для регистрации события:

function wptemy_schedule_autopublish() {
    if (!wp_next_scheduled('wptemy_cron_autopublish')) {
        wp_schedule_event(time(), 'five_minutes', 'wptemy_cron_autopublish');
    }
}
add_action('wp', 'wptemy_schedule_autopublish');

// Регистрируем интервал 5 минут
add_filter('cron_schedules', function($schedules) {
    $schedules['five_minutes'] = [
        'interval' => 300,
        'display' => __('Каждые 5 минут')
    ];
    return $schedules;
});

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

  • Создайте пост со статусом «Запланировано» (future) с датой публикации в ближайшее время.
  • Убедитесь, что системный cron запущен и корректно вызывает wp-cron.php.
  • Проверьте, что через 5 минут пост изменил статус на «Опубликовано».
  • Для отладки используйте плагин Query Monitor или добавьте error_log в функцию автопубликации.

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

  • WP-Cron не срабатывает из-за отключения стандартного cron: Проверьте, что вы настроили системный cron на сервере, иначе задачи не запустятся.
  • Неправильный URL в crontab: Убедитесь, что в команде wget указан правильный домен, включая протокол HTTPS, если он используется.
  • Конфликт с другими плагинами, блокирующими wp-cron.php: Проверьте доступ к wp-cron.php вручную через браузер.
  • Функция wp_publish_post не меняет статус: Убедитесь, что пост действительно находится в статусе «future» и дата публикации уже прошла.

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

  • Отключайте стандартный WP-Cron на сайтах с большим трафиком для снижения нагрузки.
  • Настраивайте системный cron с интервалом не менее 5 минут, чтобы не перегружать сервер.
  • Используйте кеширование и оптимизируйте запросы в функции автопубликации — выбирайте только посты с датой публикации в прошлом.
  • Для отладки используйте логирование ошибок в отдельный файл, чтобы отслеживать сбои.
  • Если требуется сложное планирование публикаций, рассмотрите плагины типа WP Scheduled Posts, но для легких задач кастомный код эффективнее.

Сравнение вариантов реализации автопубликации

МетодОписаниеПреимуществаНедостатки
Стандартный WP-CronАвтозапуск при заходе на сайтПрост в настройке, не требует доступа к серверуЗависит от трафика, возможны задержки
Системный cron + WP-CronВызов wp-cron.php по расписаниюНадежный запуск, точное расписаниеТребуется доступ к серверу и настройка crontab
Плагины автопубликацииГотовые решения с интерфейсомУдобство, расширенный функционалНагрузка на сайт, возможные конфликты
Как удалить meta robots noindex для отдельных страниц WordPress
05.01.2026
Как автоматически удалять старые отзывы в WooCommerce
22.05.2026
Как изменить автозагрузку картинок (lazy load) в WordPress
13.12.2025
Как удалить класс WooCommerce из HTML элементов без плагинов
16.06.2026
Как избежать конфликтов между кешированием и WooCommerce
09.06.2026