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

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

Почему полезен автоматический импорт постов в WordPress

Автоматизация позволяет:

  • Сократить время на ручное добавление контента;
  • Обеспечить регулярное обновление сайта свежими материалами;
  • Объединить контент из разных источников в одном месте;
  • Увеличить посещаемость и вовлечённость без лишних затрат.

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

Выбор источника контента: API или RSS

Чаще всего контент получают из двух типов источников:

RSS-ленты

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

Внешние API

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

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

Рассмотрим популярные и удобные плагины:

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

Для интеграций с внешними API часто приходится писать кастомный код или использовать REST API клиенты.

Пример кастомного импорта из RSS с помощью PHP и Cron

Рассмотрим базовый пример автоматического импорта постов из RSS-ленты с помощью пользовательской функции и WP-Cron.

function wpdir_import_rss_posts() {
    $rss = fetch_feed('https://example.com/feed');
    if (is_wp_error($rss)) {
        return;
    }
    $maxitems = $rss->get_item_quantity(5);
    $items = $rss->get_items(0, $maxitems);

    foreach ($items as $item) {
        $title = $item->get_title();
        $link = $item->get_permalink();
        $content = $item->get_content();
        
        // Проверяем, не импортирован ли уже пост
        $existing = get_posts(array(
            'meta_key' => 'wpdir_source_link',
            'meta_value' => $link,
            'post_type' => 'post'
        ));
        if ($existing) continue;

        // Создаём пост
        $post_id = wp_insert_post(array(
            'post_title' => $title,
            'post_content' => $content . '<p><a href="' . esc_url($link) . '">Источник</a></p>',
            'post_status' => 'publish',
            'post_author' => 1,
            'post_type' => 'post'
        ));

        if (!is_wp_error($post_id)) {
            add_post_meta($post_id, 'wpdir_source_link', $link, true);
        }
    }
}

// Регистрируем событие в WP-Cron
if (!wp_next_scheduled('wpdir_import_rss_cron')) {
    wp_schedule_event(time(), 'hourly', 'wpdir_import_rss_cron');
}
add_action('wpdir_import_rss_cron', 'wpdir_import_rss_posts');

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

Импорт из внешнего REST API с использованием wp_remote_get

Если источник предоставляет JSON API, можно использовать функцию wp_remote_get для получения данных и импорта.

function wpdir_import_api_posts() {
    $response = wp_remote_get('https://api.example.com/posts?limit=5');
    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) {
        $title = sanitize_text_field($item['title']);
        $content = wp_kses_post($item['content']);
        $source_id = intval($item['id']);

        // Проверка на дубли
        $existing = get_posts(array(
            'meta_key' => 'wpdir_source_id',
            'meta_value' => $source_id,
            'post_type' => 'post'
        ));
        if ($existing) 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, 'wpdir_source_id', $source_id, true);
        }
    }
}

// Добавьте wpdir_import_api_posts в нужный cron или вызовите вручную

Советы по доработке и безопасности

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

  • Проверку уникальности — всегда проверяйте, чтобы не создавать дублирующийся контент.
  • Очистку и фильтрацию данных — используйте функции sanitize_text_field, wp_kses_post для безопасности.
  • Обработка ошибок — логируйте ошибки запроса и обработки.
  • Частоту обновления — не делайте слишком частые запросы, чтобы не перегружать сервер источника и не получить блокировку.
  • Авторские права — убедитесь, что у вас есть право публиковать импортируемый контент.

Заключение и дополнительные ресурсы

Автоматический импорт постов — отличный способ поддерживать сайт свежим и актуальным. Используйте готовые плагины для простых задач или пишите кастомные решения для специфичных требований. Если хотите расширить функциональность, обратите внимание на плагин WP All Import — он существенно упростит работу с импортом.

Также полезен плагин Feedzy RSS Feeds для импорта из RSS с гибкими настройками.

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

WooCommerce: как автоматически удалять товары при нулевом остатке
23.05.2026
WooCommerce: автоматическое удаление товаров при нулевом остатке и без вариаций
15.06.2026
WooCommerce: автоматическое удаление товаров с нулевым остатком без плагинов
12.06.2026
WooCommerce: Автоматическое удаление товаров при нулевом остатке
06.06.2026
Как удалить или изменить URL страницы в WordPress без перенаправления
19.01.2026