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

|

Введение в автоматический импорт постов в WordPress

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

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

Выбор источника и способов импорта

Первый шаг — выбрать источник данных. Часто это RSS-ленты или JSON API. В зависимости от формата меняется и способ обработки данных.

Для примера возьмем JSON API, возвращающий массив постов с полями title, content, date, author.

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

Пример базовой функции импорта JSON

function wpzoom_import_posts_from_api() {
    $response = wp_remote_get('https://example.com/api/posts');
    if (is_wp_error($response)) {
        return;
    }
    $data = json_decode(wp_remote_retrieve_body($response), true);
    if (empty($data)) {
        return;
    }
    foreach ($data as $item) {
        // Проверяем, существует ли уже пост по уникальному признаку
        $existing = get_page_by_title($item['title'], OBJECT, 'post');
        if ($existing) {
            continue;
        }
        // Создаем новый пост
        $post_id = wp_insert_post([
            'post_title' => sanitize_text_field($item['title']),
            'post_content' => wp_kses_post($item['content']),
            'post_date' => sanitize_text_field($item['date']),
            'post_status' => 'publish',
            'post_author' => 1,
        ]);
    }
}

Эта функция получает данные, проверяет на дубли и создает новые записи.

Настройка WP Cron для регулярного запуска импорта

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

function wpzoom_activation() {
    if (!wp_next_scheduled('wpzoom_import_cron_hook')) {
        wp_schedule_event(time(), 'hourly', 'wpzoom_import_cron_hook');
    }
}
register_activation_hook(__FILE__, 'wpzoom_activation');

function wpzoom_deactivation() {
    wp_clear_scheduled_hook('wpzoom_import_cron_hook');
}
register_deactivation_hook(__FILE__, 'wpzoom_deactivation');

add_action('wpzoom_import_cron_hook', 'wpzoom_import_posts_from_api');

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

Создание виджета для отображения импортированных постов

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

class WPZoom_Imported_Posts_Widget extends WP_Widget {
    public function __construct() {
        parent::__construct(
            'wpzoom_imported_posts_widget',
            'Импортированные посты',
            ['description' => 'Отображает последние импортированные посты']
        );
    }
    public function widget($args, $instance) {
        echo $args['before_widget'];
        echo $args['before_title'] . 'Последние импортированные посты' . $args['after_title'];

        $query = new WP_Query([
            'post_type' => 'post',
            'posts_per_page' => 5,
            'orderby' => 'date',
            'order' => 'DESC',
            'meta_key' => '_imported', // Можно добавить мета для точной фильтрации
        ]);

        if ($query->have_posts()) {
            echo '<ul>';
            while ($query->have_posts()) {
                $query->the_post();
                echo '<li><a href="' . get_the_permalink() . '">' . get_the_title() . '</a></li>';
            }
            echo '</ul>';
            wp_reset_postdata();
        } else {
            echo '<p>Нет импортированных постов</p>';
        }
        echo $args['after_widget'];
    }
    public function form($instance) {
        // Можно добавить настройки виджета
    }
    public function update($new_instance, $old_instance) {
        return $new_instance;
    }
}

function wpzoom_register_widgets() {
    register_widget('WPZoom_Imported_Posts_Widget');
}
add_action('widgets_init', 'wpzoom_register_widgets');

Этот виджет выводит последние 5 импортированных постов. Для точной фильтрации можно при импорте добавлять мета-поле _imported.

Добавление мета-поля при импорте для удобной фильтрации

Чтобы отличать импортированные записи от остальных, добавим мета-поле при создании поста:

function wpzoom_import_posts_from_api() {
    $response = wp_remote_get('https://example.com/api/posts');
    if (is_wp_error($response)) {
        return;
    }
    $data = json_decode(wp_remote_retrieve_body($response), true);
    if (empty($data)) {
        return;
    }
    foreach ($data as $item) {
        $existing = get_page_by_title($item['title'], OBJECT, 'post');
        if ($existing) {
            continue;
        }
        $post_id = wp_insert_post([
            'post_title' => sanitize_text_field($item['title']),
            'post_content' => wp_kses_post($item['content']),
            'post_date' => sanitize_text_field($item['date']),
            'post_status' => 'publish',
            'post_author' => 1,
        ]);
        if ($post_id) {
            update_post_meta($post_id, '_imported', 1);
        }
    }
}

Дополнительные советы и рекомендации

1. Если источник часто меняется, используйте кеширование или проверяйте ETag, чтобы не импортировать одни и те же данные повторно.

2. Для более сложных сценариев рассмотрите использование WP All Import или аналогичных плагинов с поддержкой cron и API.

3. При работе с большим объемом данных разбивайте импорт на части, чтобы избежать превышения лимитов по времени выполнения.

4. Если нужна интеграция с плагинами, например, Expert Review для автоматических отзывов, импортируйте дополнительные поля и связывайте записи после импорта.

Заключение

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

Для удобства можно оформить этот функционал в отдельный плагин и расширять его по мере необходимости.

Если хотите готовое решение с расширенными возможностями, обратите внимание на плагины с поддержкой импорта и интеграцией с вашей темой или виджетами. Например, можно использовать Expert Review для автоматизации отзывов, или тему Root с улучшенной интеграцией виджетов и кастомных типов записей.

Как добавить поддержку WebP в WordPress без плагинов
18.03.2026
Создать собственный виджет WordPress: подробное руководство с примерами кода
08.11.2025
Как избежать проблем с дублированием артикулов (SKU) при массовом импорте товаров в WooCommerce
08.05.2026
Как избежать проблем при масштабном экспорте и импорте продуктов в WooCommerce
17.04.2026
WooCommerce: автоматическое обновление остатков товаров при продаже
27.05.2026
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше