Автоматический импорт постов из внешнего источника в WordPress

Почему автоматический импорт постов важен для WordPress-сайтов

Автоматический импорт контента из внешних источников в WordPress — популярная задача для сайтов новостей, агрегаторов и тематических блогов. Такой подход позволяет поддерживать сайт свежим, без необходимости вручную создавать каждый пост. Для разработчика важно реализовать импорт с учетом особенностей сайта, чтобы избежать дублирования, обеспечить корректную обработку данных и оптимизировать работу.

В этой статье мы рассмотрим, как создать собственный модуль автоматического импорта постов из внешнего RSS или JSON API с примерами кода, а также упомянем полезные плагины, которые можно использовать в связке или как альтернативу.

Как выбрать источник данных для импорта: RSS и JSON API

Чаще всего источником для автоматического импорта выступают RSS-ленты или REST API с форматом JSON. RSS удобен своей простотой и распространен в блогах и новостных сайтах. JSON API позволяет получать более структурированные данные и гибко настраивать получаемый контент.

Для примера возьмем импорт из RSS: URL ленты, которую мы будем парсить и создавать новые записи на сайте. Альтернативно, для JSON API потребуется обработать ответ с помощью wp_remote_get и декодировать JSON.

Создание функции автозапуска импорта в WordPress (cron)

Чтобы импорт выполнялся регулярно, нужно организовать расписание с помощью WP-Cron. Добавим событие, которое будет запускать нашу функцию импорта.

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

add_action( 'wplancer_import_event', 'wplancer_run_import' );

Здесь мы планируем запуск функции wplancer_run_import каждый час. Далее создадим эту функцию.

Парсинг RSS и создание постов программно

Для парсинга RSS используем встроенный класс SimplePie, который идет в комплекте с WordPress.

function wplancer_run_import() {
  $rss = fetch_feed( 'https://example.com/feed/' );
  if ( is_wp_error( $rss ) ) {
    return; // Ошибка загрузки RSS
  }
  $maxitems = $rss->get_item_quantity( 10 );
  $rss_items = $rss->get_items( 0, $maxitems );

  foreach ( $rss_items as $item ) {
    $title = $item->get_title();
    $content = $item->get_content();
    $link = $item->get_link();
    $guid = $item->get_id();

    // Проверяем, есть ли уже запись с таким guid
    $existing = new WP_Query(array(
      'meta_key' => '_wplancer_import_guid',
      'meta_value' => $guid,
      'post_type' => 'post',
      'post_status' => 'publish'
    ));

    if ( $existing->have_posts() ) {
      continue; // Запись уже есть
    }

    // Создаем новый пост
    $post_id = wp_insert_post(array(
      'post_title' => $title,
      'post_content' => $content . '<br><a href="' . esc_url( $link ) . '" target="_blank">Источник</a>',
      'post_status' => 'publish',
      'post_author' => 1,
      'post_category' => array(1) // ID категории
    ));

    if ( ! is_wp_error( $post_id ) ) {
      add_post_meta( $post_id, '_wplancer_import_guid', $guid, true );
    }
  }
}

Здесь мы загружаем последние 10 элементов, проверяем по уникальному идентификатору (guid), чтобы не создавать дубли, и добавляем ссылку на источник в содержимое.

Обработка JSON API: пример импорта из внешнего REST API

Если источник — JSON API, например, https://example.com/api/posts, то логика похожа, но придется вручную обрабатывать ответ:

function wplancer_import_from_json() {
  $response = wp_remote_get( 'https://example.com/api/posts' );
  if ( is_wp_error( $response ) ) {
    return;
  }
  $body = wp_remote_retrieve_body( $response );
  $data = json_decode( $body, true );
  if ( empty( $data ) || ! is_array( $data ) ) {
    return;
  }

  foreach ( $data as $item ) {
    $guid = sanitize_text_field( $item['id'] );
    $title = sanitize_text_field( $item['title'] );
    $content = wp_kses_post( $item['content'] );

    $existing = new WP_Query(array(
      'meta_key' => '_wplancer_import_guid',
      'meta_value' => $guid,
      'post_type' => 'post',
      'post_status' => 'publish'
    ));

    if ( $existing->have_posts() ) {
      continue;
    }

    $post_id = wp_insert_post(array(
      'post_title' => $title,
      'post_content' => $content,
      'post_status' => 'publish',
      'post_author' => 1
    ));

    if ( ! is_wp_error( $post_id ) ) {
      add_post_meta( $post_id, '_wplancer_import_guid', $guid, true );
    }
  }
}

Эту функцию тоже можно повесить на cron для периодического запуска.

Полезные плагины для автоматического импорта контента

Если вы не хотите писать код с нуля, обратите внимание на плагины:

  • WP All Import — мощный плагин для импорта из CSV, XML и других форматов. Позволяет гибко настраивать импорт.
  • Feedzy RSS Feeds — плагин для импорта и отображения RSS-лент с возможностью фильтрации и настройки.
  • WP RSS Aggregator — удобный инструмент для агрегирования и импорта RSS с разных источников.

Для интеграции с плагинами WPGPT или Expert Review с wpshop.ru можно автоматизировать анализ импортируемого контента и его оценку качества с помощью Expert Review, или генерировать аннотации с WPGPT.

Рекомендации по безопасности и оптимизации при автоматическом импорте

При автоматическом импорте важно учитывать несколько моментов:

  • Проверяйте уникальность контента, чтобы избежать дублирования и штрафов от поисковиков.
  • Используйте транзиенты или кэширование, чтобы не перегружать внешний источник частыми запросами.
  • Обрабатывайте ошибки подключения и парсинга, чтобы не приводить к сбоям сайта.
  • Регулярно удаляйте устаревшие или неактуальные импортированные записи, если это предусмотрено логикой.

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

Как добавить и менять атрибуты товара в WooCommerce через AJAX без перезагрузки страницы
13.05.2026
Автоматическое удаление товара из корзины WooCommerce при установке количества в 0 через AJAX
25.05.2026
Как избежать проблем с кешированием в WordPress: практические решения и примеры
19.01.2026
Как оптимизировать загрузку шаблонов в WordPress для ускорения сайта
30.12.2025
Автоматический импорт постов из внешнего источника в WordPress
07.04.2026