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

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

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

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

Автоматический импорт из RSS с примерами кода

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

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

Для начала создадим функцию wpsetup_import_rss_posts(), которая будет загружать RSS, проверять новые элементы и создавать посты:

function wpsetup_import_rss_posts() {
    $rss = fetch_feed('https://example.com/feed/'); // URL RSS-ленты
    if (is_wp_error($rss)) {
        error_log('Ошибка при загрузке RSS: ' . $rss->get_error_message());
        return;
    }

    $maxitems = $rss->get_item_quantity(10); // максимум 10 новых постов
    $rss_items = $rss->get_items(0, $maxitems);

    foreach ($rss_items as $item) {
        $title = $item->get_title();
        $link = $item->get_link();
        $content = $item->get_content();
        $date = $item->get_date('Y-m-d H:i:s');

        // Проверяем, есть ли уже такой пост
        $existing = get_posts(array(
            'title' => $title,
            'post_type' => 'post',
            'post_status' => 'any',
            'numberposts' => 1
        ));
        if ($existing) continue;

        // Создаём новый пост
        $post_id = wp_insert_post(array(
            'post_title' => $title,
            'post_content' => $content,
            'post_status' => 'publish',
            'post_date' => $date,
            'post_type' => 'post'
        ));

        if (!is_wp_error($post_id)) {
            // Можно добавить категории, теги и другие метаданные
        }
    }
}

Настройка регулярного запуска через WP-Cron

Чтобы импорт происходил автоматически, нужно добавить событие в планировщик задач WordPress:

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

add_action('wpsetup_rss_import_hook', 'wpsetup_import_rss_posts');

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

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

Многие современные сервисы предоставляют данные в формате JSON через REST API. Импорт из такого источника более гибкий, но требует работы с запросами и обработкой JSON.

Пример функции для импорта из JSON API

function wpsetup_import_json_api_posts() {
    $response = wp_remote_get('https://api.example.com/posts');
    if (is_wp_error($response)) {
        error_log('Ошибка при запросе API: ' . $response->get_error_message());
        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']);
        $date = sanitize_text_field($item['date']);

        // Проверяем дубликаты по заголовку
        $existing = get_posts(array(
            'title' => $title,
            'post_type' => 'post',
            'post_status' => 'any',
            'numberposts' => 1
        ));
        if ($existing) continue;

        wp_insert_post(array(
            'post_title' => $title,
            'post_content' => $content,
            'post_status' => 'publish',
            'post_date' => $date,
'            post_type' => 'post'
        ));
    }
}

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

Аналогично RSS, можно добавить крон-задачу для регулярного запуска импорта JSON:

function wpsetup_schedule_json_import() {
    if (!wp_next_scheduled('wpsetup_json_import_hook')) {
        wp_schedule_event(time(), 'hourly', 'wpsetup_json_import_hook');
    }
}
add_action('wp', 'wpsetup_schedule_json_import');
add_action('wpsetup_json_import_hook', 'wpsetup_import_json_api_posts');

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

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

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

Эти плагины можно найти и скачать на WPSHOP.ru.

Обработка изображений и метаданных при импорте

Часто в RSS или API приходят ссылки на изображения, которые нужно импортировать и прикреплять к постам. Для этого можно использовать функцию wpsetup_import_image_from_url():

function wpsetup_import_image_from_url($image_url, $post_id) {
    require_once(ABSPATH . 'wp-admin/includes/file.php');
    require_once(ABSPATH . 'wp-admin/includes/media.php');
    require_once(ABSPATH . 'wp-admin/includes/image.php');

    $tmp = download_url($image_url);
    if (is_wp_error($tmp)) return false;

    $file = array(
        'name' => basename($image_url),
        'tmp_name' => $tmp
    );

    $id = media_handle_sideload($file, $post_id);
    if (is_wp_error($id)) {
        @unlink($tmp);
        return false;
    }

    set_post_thumbnail($post_id, $id);
    return true;
}

Вызывайте эту функцию после создания поста, передавая ссылку на изображение из RSS или API.

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

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

  • Ограничивайте количество импортируемых постов за один запуск.
  • Проверяйте и фильтруйте входящие данные, избегайте XSS и SQL-инъекций.
  • Используйте WP-Cron или системный cron для стабильного запуска задач.
  • Логируйте ошибки и исключения для отладки.
  • Периодически очищайте устаревшие временные файлы и ненужные посты.

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

Как создать выбор по дате в админке WordPress с примерами кода
21.02.2026
Как добавить AJAX фильтрацию товаров в WordPress без перезагрузки страницы
25.01.2026
Как использовать хуки для изменения функциональности WordPress без переписывания кода
16.03.2026
Как создать настройку автообновления плагинов WordPress с контролем и уведомлениями
01.03.2026
Как удалить и очистить комментарии в WordPress
18.02.2026