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

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

Почему стоит создавать собственный импортёр, а не использовать готовые плагины

Готовые решения часто бывают громоздкими, с лишними функциями и не всегда подходят под конкретные задачи. Создав свой плагин, вы получите точечное решение, которое легко настраивать и расширять под нужды проекта. Кроме того, это отличный способ глубже понять работу с API, WP_Query, WP-Cron и функциями для работы с контентом в WordPress.

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

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

Для начала определимся с источником данных. Это может быть RSS-лента, JSON API или XML. Принцип работы примерно одинаков:

  • Получить данные из внешнего источника;
  • Обработать и распарсить их;
  • Проверить, существуют ли уже такие записи в базе, чтобы не создавать дубликаты;
  • Создать новые посты или обновить существующие;
  • Запланировать регулярный запуск импорта через WP-Cron.

Пример: импорт постов из RSS-ленты

RSS — один из самых простых форматов для импорта. WordPress имеет встроенную функцию fetch_feed() из библиотеки SimplePie для работы с RSS.

function wpbook_import_posts_from_rss() {
    include_once( ABSPATH . WPINC . '/feed.php' );

    $rss = fetch_feed('https://example.com/feed/');
    if (is_wp_error($rss)) {
        return;
    }

    $maxitems = $rss->get_item_quantity(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();
        $pubDate = $item->get_date('Y-m-d H:i:s');

        // Проверяем, есть ли пост с таким URL (сохраним ссылку в метаполе)
        $existing = new WP_Query(array(
            'post_type' => 'post',
            'meta_key' => 'wpbook_import_source_url',
            'meta_value' => $link,
            'posts_per_page' => 1
        ));

        if ($existing->have_posts()) {
            continue; // Пост уже импортирован
        }

        // Создаем новый пост
        $postarr = array(
            'post_title' => $title,
            'post_content' => $content,
            'post_status' => 'publish',
            'post_date' => $pubDate,
            'post_author' => 1, // ID автора
        );

        $post_id = wp_insert_post($postarr);

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

Регулярный запуск импорта через WP-Cron

Чтобы импорт запускался автоматически, добавим расписание и событие:

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

add_action('wpbook_rss_import_event', 'wpbook_import_posts_from_rss');

Этот код запускает импорт каждый час. Вы можете изменить 'hourly' на 'twicedaily' или 'daily' или добавить своё собственное расписание через фильтр cron_schedules.

Импорт из JSON API

Если источник — API с JSON-ответом, можно использовать wp_remote_get() для получения данных и json_decode() для их обработки.

function wpbook_import_posts_from_api() {
    $response = wp_remote_get('https://api.example.com/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) {
        $title = sanitize_text_field($item['title']);
        $content = wp_kses_post($item['content']);
        $pubDate = sanitize_text_field($item['date']);
        $source_id = sanitize_text_field($item['id']);

        // Проверяем, есть ли пост с таким source_id
        $existing = new WP_Query(array(
            'post_type' => 'post',
            'meta_key' => 'wpbook_import_source_id',
            'meta_value' => $source_id,
            'posts_per_page' => 1
        ));

        if ($existing->have_posts()) {
            continue; // Уже импортирован
        }

        $postarr = array(
            'post_title' => $title,
            'post_content' => $content,
            'post_status' => 'publish',
            'post_date' => $pubDate,
            'post_author' => 1,
        );

        $post_id = wp_insert_post($postarr);

        if (!is_wp_error($post_id)) {
            add_post_meta($post_id, 'wpbook_import_source_id', $source_id, true);
        }
    }
}

Обработка ошибок и логирование

При работе с импортом важно логировать ошибки и сбои, чтобы не пропустить проблемы. Можно использовать стандартный лог WordPress или создавать свой в файле.

Пример простой функции логирования в файл:

function wpbook_log($message) {
    $logfile = WP_CONTENT_DIR . '/wpbook-import.log';
    $date = date('Y-m-d H:i:s');
    error_log("[$date] $message\n", 3, $logfile);
}

Вызывайте wpbook_log('Сообщение') при ошибках или важных событиях.

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

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

Пример кода для обновления поста:

if ($existing->have_posts()) {
    $existing_post_id = $existing->posts[0]->ID;
    $postarr = array(
        'ID' => $existing_post_id,
        'post_title' => $title,
        'post_content' => $content,
        'post_date' => $pubDate,
    );
    wp_update_post($postarr);
    continue;
}

Плагины и инструменты для расширения возможностей импорта

Если вы хотите расширить функционал, рассмотрите интеграцию с такими плагинами, как Clearfy Pro для оптимизации работы сайта после импорта или WPRemark для управления комментариями к импортированным постам.

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

Итог

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

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как создать автоматический импорт данных из Excel в WordPress
05.03.2026
Как создать динамическую таблицу в WordPress с помощью шорткода
26.11.2025
Как создать автоматический импорт данных из внешнего API в WordPress
11.02.2026
Как использовать pre_get_posts для изменения запросов в WordPress без плагинов
19.04.2026
Как избежать проблем с пересекающимися правилами в WooCommerce
03.05.2026
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее