Как сделать отложенную публикацию записей в WordPress

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

Отложенная публикация записей в WordPress: базовые возможности

В WordPress изначально встроена функция планирования публикаций. При создании записи вы можете выбрать дату и время публикации в будущем. Для этого в редакторе нажмите на "Опубликовать" → "Сразу" и установите желаемую дату и время. После сохранения запись автоматически опубликуется в указанное время.

Этот способ прост, но имеет ограничения:

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

Для расширения функционала рассмотрим несколько практических решений.

Массовое планирование публикаций: плагин WP Scheduled Posts

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

Основные функции WP Scheduled Posts

  • Интуитивный календарь для перетаскивания и назначения времени публикаций.
  • Автоматическое планирование постов из черновиков.
  • Уведомления о предстоящих публикациях.
  • Поддержка кастомных типов записей.

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

Кастомное управление отложенными публикациями через код

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

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

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

function wpapp_schedule_publish_pending_review( $post_id ) {
    $post = get_post( $post_id );
    if ( ! $post || $post->post_status !== 'pending_review' ) {
        return;
    }

    if ( ! wp_next_scheduled( 'wpapp_publish_pending_review_hook', array( $post_id ) ) ) {
        wp_schedule_single_event( time() + DAY_IN_SECONDS, 'wpapp_publish_pending_review_hook', array( $post_id ) );
    }
}
add_action( 'wp_insert_post', 'wpapp_schedule_publish_pending_review' );

function wpapp_publish_pending_review( $post_id ) {
    $post = get_post( $post_id );
    if ( $post && $post->post_status === 'pending_review' ) {
        wp_update_post( array(
            'ID' => $post_id,
            'post_status' => 'publish',
        ) );
    }
}
add_action( 'wpapp_publish_pending_review_hook', 'wpapp_publish_pending_review' );

Объяснение:

  • При вставке записи с статусом pending_review планируется событие через сутки.
  • Через сутки срабатывает хук wpapp_publish_pending_review_hook, который меняет статус записи на publish.

Такой подход позволяет создавать гибкие правила публикации без вмешательства пользователя.

Отложенная публикация с условиями: пример проверки внешнего API

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

function wpapp_schedule_publish_after_api_check( $post_id ) {
    $post = get_post( $post_id );
    if ( ! $post || $post->post_status !== 'pending_api' ) {
        return;
    }

    wp_schedule_single_event( time() + HOUR_IN_SECONDS, 'wpapp_api_check_publish_hook', array( $post_id ) );
}
add_action( 'wp_insert_post', 'wpapp_schedule_publish_after_api_check' );

function wpapp_api_check_publish( $post_id ) {
    $post = get_post( $post_id );
    if ( ! $post || $post->post_status !== 'pending_api' ) {
        return;
    }

    $response = wp_remote_get( 'https://api.example.com/check?post_id=' . $post_id );
    if ( is_wp_error( $response ) ) {
        // Ошибка соединения, повторить позже
        wp_schedule_single_event( time() + 30 * MINUTE_IN_SECONDS, 'wpapp_api_check_publish_hook', array( $post_id ) );
        return;
    }

    $body = wp_remote_retrieve_body( $response );
    $data = json_decode( $body, true );

    if ( ! empty( $data['ready'] ) && $data['ready'] === true ) {
        wp_update_post( array(
            'ID' => $post_id,
            'post_status' => 'publish',
        ) );
    } else {
        // Если не готово, повторяем проверку через час
        wp_schedule_single_event( time() + HOUR_IN_SECONDS, 'wpapp_api_check_publish_hook', array( $post_id ) );
    }
}
add_action( 'wpapp_api_check_publish_hook', 'wpapp_api_check_publish' );

Такой механизм полезен для интеграции WordPress с внешними системами, когда публикация зависит от их статуса.

Советы по отладке и оптимизации отложенной публикации

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

  • Настроить системный cron на сервере, который вызывает wp-cron.php по расписанию.
  • Использовать плагины мониторинга WP Cron, чтобы отслеживать планировщик.
  • Минимизировать количество запланированных задач, объединяя их при возможности.

Также следите за статусами записей и избегайте конфликтов с другими плагинами, которые могут изменять публикации.

Заключение

Отложенная публикация в WordPress — мощный инструмент для управления контентом. Стандартные возможности подходят для большинства задач, но при необходимости можно расширять функционал с помощью плагинов и кастомного кода. Приведенные примеры помогут вам быстро реализовать массовое планирование публикаций и сложные сценарии с условиями. Для удобства редакторов рекомендуем попробовать WP Scheduled Posts и адаптировать приведенный код под свои задачи.

Наш каталог плагинов WordPress