Как создать автоматическую публикацию постов в WordPress с помощью Cron

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

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

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

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

Как создать задачу автоматической публикации постов с помощью WP-Cron

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

Шаг 1. Регистрация пользовательского события

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

function wplessons_schedule_auto_publish() {
    if (!wp_next_scheduled('wplessons_auto_publish_event')) {
        wp_schedule_event(time(), 'hourly', 'wplessons_auto_publish_event');
    }
}
add_action('wp', 'wplessons_schedule_auto_publish');

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

Шаг 2. Создание функции-обработчика публикации

Теперь нужно определить, что делать при срабатывании события. Например, публиковать все черновики, у которых в метаполе auto_publish_time наступило время публикации:

function wplessons_handle_auto_publish() {
    $args = [
        'post_status' => 'draft',
        'post_type' => 'post',
        'meta_query' => [
            [
                'key' => 'auto_publish_time',
                'value' => current_time('timestamp'),
                'compare' => '<=',
                'type' => 'NUMERIC'
            ]
        ]
    ];
    $query = new WP_Query($args);

    if ($query->have_posts()) {
        while ($query->have_posts()) {
            $query->the_post();
            $post_id = get_the_ID();
            // Публикуем запись
            wp_publish_post($post_id);
            // Удаляем метаполе, чтобы не публиковать повторно
            delete_post_meta($post_id, 'auto_publish_time');
        }
        wp_reset_postdata();
    }
}
add_action('wplessons_auto_publish_event', 'wplessons_handle_auto_publish');

Таким образом, записи с установленным метаполем auto_publish_time (в формате timestamp) будут опубликованы в момент наступления этого времени.

Шаг 3. Добавление метаполя с датой публикации

Чтобы задать дату и время автоматической публикации, можно добавить пользовательское поле auto_publish_time при создании записи. Это можно сделать вручную или программно. Например, при сохранении записи через метабокс:

function wplessons_save_auto_publish_time($post_id) {
    if (isset($_POST['auto_publish_time'])) {
        $timestamp = strtotime(sanitize_text_field($_POST['auto_publish_time']));
        if ($timestamp) {
            update_post_meta($post_id, 'auto_publish_time', $timestamp);
            // Ставим статус в черновик, если публикация запланирована
            if (get_post_status($post_id) !== 'draft') {
                wp_update_post(['ID' => $post_id, 'post_status' => 'draft']);
            }
        }
    }
}
add_action('save_post', 'wplessons_save_auto_publish_time');

В форму редактирования записи можно добавить поле для ввода даты и времени в удобном формате.

Использование плагинов для автоматической публикации

Если вы не хотите писать код, можно использовать готовые решения. Вот несколько популярных плагинов для автоматической публикации постов:

  • Schedule Posts Calendar — визуальный календарь для управления запланированными публикациями и их автоматическим запуском.
  • Auto Post Scheduler — плагин, который автоматически публикует черновики, запланированные или отложенные посты по заданному расписанию.
  • WP Scheduled Posts — расширенный менеджер расписания публикаций с возможностью календаря и уведомлений.

Эти плагины позволяют гибко управлять расписанием публикаций и минимизируют необходимость собственного программирования.

Рекомендации по оптимизации и надежности

WP-Cron запускается при посещении сайта, поэтому на малопосещаемых ресурсах задачи могут выполняться с задержкой. Чтобы избежать этого, можно:

  • Настроить реальный системный cron, который будет вызывать WP-Cron через wget или curl команду, например:
* * * * * wget -q -O - https://ваш-сайт.ru/wp-cron.php?doing_wp_cron >/dev/null 2>&1
  • Использовать плагины, оптимизирующие работу WP-Cron, например Clearfy Pro (подробнее на https://wpshop.ru/clearfy-pro), которые позволяют отключить стандартный WP-Cron и запускать задачи через системный планировщик.
  • Минимизировать объем задач в WP-Cron, объединяя похожие события и избегая частых запусков.

Вывод

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

Если хотите быстро и удобно управлять расписанием публикаций, рекомендуем обратить внимание на плагин WP Scheduled Posts с простым интерфейсом и расширенными функциями.

Как удалить неиспользуемые теги в WordPress для оптимизации базы данных
02.03.2026
Как автоматически изменить статус заказа WooCommerce при возврате
15.05.2026
Как создать собственный шорткод в WordPress с примером кода
13.11.2025
Как изменить permalink для типа записи в WordPress без плагинов
31.12.2025
Как удалить или изменить автора старой записи в WordPress
13.01.2026