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

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

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

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

  • Точно контролировать формат данных и логику обработки.
  • Легко интегрировать с кастомными типами записей и таксономиями.
  • Автоматизировать задачи с помощью WP-Cron и событий.
  • Оптимизировать скорость и ресурсы, минимизируя нагрузку.

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

Шаг 1. Подготовка источника данных для импорта

Первое — необходимо определиться с источником. Это может быть JSON с внешнего API, XML-файл, CSV или даже RSS-лента. Для примера возьмём JSON API. Предположим, что внешний сервис возвращает список постов в формате:

{
  "posts": [
    {"title": "Заголовок 1", "content": "Содержимое 1", "date": "2024-06-01"},
    {"title": "Заголовок 2", "content": "Содержимое 2", "date": "2024-06-02"}
  ]
}

Чтобы загрузить этот JSON, можно использовать wp_remote_get, встроенную функцию WordPress для HTTP-запросов.

Пример функции для получения данных из API

function wpunit_get_import_data() {
    $response = wp_remote_get('https://example.com/api/posts');
    if (is_wp_error($response)) {
        return false;
    }
    $body = wp_remote_retrieve_body($response);
    $data = json_decode($body, true);
    if (json_last_error() !== JSON_ERROR_NONE) {
        return false;
    }
    return $data['posts'] ?? [];
}

Эта функция возвращает массив постов или false при ошибке.

Шаг 2. Обработка и импорт данных в WordPress

После получения массива постов нужно пройтись по каждому элементу и создать запись в WordPress через wp_insert_post. Важно проверить, чтобы не было дублирования постов — для этого можно хранить внешний ID или сравнивать по названию и дате.

Пример функции импорта одного поста

function wpunit_import_single_post($post_data) {
    // Проверяем наличие поста с таким названием и датой
    $existing = get_posts([
        'title' => $post_data['title'],
        'date_query' => [
            [
                'year'  => date('Y', strtotime($post_data['date'])),
                'month' => date('m', strtotime($post_data['date'])),
                'day'   => date('d', strtotime($post_data['date'])),
            ],
        ],
        'post_type' => 'post',
        'post_status' => 'publish',
        'fields' => 'ids',
    ]);
    if (!empty($existing)) {
        // Такой пост уже есть, пропускаем
        return false;
    }
    $postarr = [
        'post_title'   => wp_strip_all_tags($post_data['title']),
        'post_content' => $post_data['content'],
        'post_status'  => 'publish',
        'post_date'    => $post_data['date'],
        'post_type'    => 'post',
    ];
    $post_id = wp_insert_post($postarr);
    return $post_id;
}

Данная функция вставляет пост, если такого ещё нет, и возвращает ID созданного поста.

Шаг 3. Автоматизация импорта с помощью WP-Cron

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

Добавление WP-Cron события

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

Обработчик Cron события

function wpunit_import_cron_function() {
    $posts = wpunit_get_import_data();
    if (!$posts) {
        return;
    }
    foreach ($posts as $post_data) {
        wpunit_import_single_post($post_data);
    }
}
add_action('wpunit_import_cron_hook', 'wpunit_import_cron_function');

Таким образом, импорт будет происходить автоматически каждый час.

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

Очень важно вести логирование ошибок, чтобы в случае проблем быстро понять причину. Для этого можно записывать ошибки в отдельный файл или использовать стандартный error_log. Вот простой пример записи ошибок в файл:

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

В функции импорта добавьте вызовы wpunit_log_error при неудачных запросах или ошибках.

Шаг 5. Использование плагинов WPUnit для расширения возможностей

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

Например, с помощью метода WPUnit Database Query можно эффективно проверять наличие постов, а WPUnit Schedule Event — легко управлять крон-событиями.

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

Подсказки и советы по улучшению импорта

  • При большом объёме данных разбивайте импорт на части, чтобы избежать таймаутов сервера.
  • Для импорта изображений используйте функцию media_sideload_image, чтобы добавлять медиафайлы к постам.
  • Можно расширить функционал, импортируя кастомные поля и таксономии, передавая их в wp_insert_post и используя функции update_post_meta.
  • Для управления импортом из админки создайте отдельную страницу с кнопкой запуска и выводом статуса.

Заключение

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

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

Как создать собственный объект метаданных в WordPress для расширенного хранения данных
19.03.2026
Как создать автоматический импорт отзывов в WordPress
09.02.2026
Как использовать WP-Cron для задач автоматизации в WordPress
05.12.2025
Как избежать конфликтов между плагинами в WordPress
18.01.2026
Правильное удаление неактивных пользователей WordPress с примером кода
30.04.2026