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

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

Почему важна обработка ошибок при импорте данных

При работе с внешними API или файлами могут возникать самые разные ошибки: от проблем с сетью до некорректных данных или ограничений со стороны сервера. Если не предусмотреть обработку ошибок, импорт может прерваться, а это приведёт к неполным данным на сайте и негативному опыту пользователей.

Обработка ошибок позволяет:

  • Автоматически повторять попытки импорта при временных сбоях
  • Логировать ошибки для последующего анализа и исправления
  • Избежать дублирования записей и потери данных
  • Информировать администратора сайта о проблемах

Рассмотрим, как можно реализовать автоматический импорт с обработкой ошибок на примере импорта постов из JSON API.

Создание функции автоматического импорта с обработкой ошибок

Начнём с базовой функции, которая будет запрашивать данные из внешнего API, проверять их и создавать новые записи в WordPress. В коде мы добавим обработку ошибок и логирование.

function wpkit_import_posts_from_api() {
    $api_url = 'https://example.com/api/posts';
    $response = wp_remote_get($api_url, array('timeout' => 15));

    if (is_wp_error($response)) {
        error_log('WPKit Import Error: ' . $response->get_error_message());
        return false; // Ошибка запроса
    }

    $code = wp_remote_retrieve_response_code($response);
    if ($code != 200) {
        error_log('WPKit Import Error: HTTP response code ' . $code);
        return false; // Ошибка HTTP
    }

    $body = wp_remote_retrieve_body($response);
    $data = json_decode($body, true);
    if (json_last_error() !== JSON_ERROR_NONE) {
        error_log('WPKit Import Error: JSON decode error: ' . json_last_error_msg());
        return false; // Ошибка парсинга JSON
    }

    if (empty($data) || !is_array($data)) {
        error_log('WPKit Import Error: Empty or invalid data');
        return false;
    }

    foreach ($data as $item) {
        if (empty($item['title']) || empty($item['content'])) {
            error_log('WPKit Import Warning: Missing title or content in item');
            continue; // Пропускаем некорректные записи
        }

        // Проверяем, не импортирован ли уже этот пост (по уникальному ID)
        $existing = get_posts(array(
            'meta_key' => 'wpkit_external_id',
            'meta_value' => $item['id'],
            'post_type' => 'post',
            'post_status' => 'any',
            'numberposts' => 1
        ));
        if ($existing) {
            continue; // Уже импортировано
        }

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

        if (is_wp_error($post_id)) {
            error_log('WPKit Import Error: Failed to insert post for ID ' . $item['id']);
            continue;
        }

        // Сохраняем внешний ID для проверки дубликатов
        update_post_meta($post_id, 'wpkit_external_id', sanitize_text_field($item['id']));
    }

    return true;
}

Разбор кода

В функции wpkit_import_posts_from_api происходит:

  • Запрос к API с таймаутом 15 секунд
  • Проверка ошибок HTTP и JSON
  • Обработка каждого элемента массива с проверкой обязательных полей
  • Проверка на дубликаты через метаполе wpkit_external_id
  • Создание постов и сохранение внешнего ID для будущих проверок
  • Логирование всех ошибок и предупреждений в системный лог PHP

Автоматизация запуска импорта через WP-Cron

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

function wpkit_schedule_import() {
    if (!wp_next_scheduled('wpkit_daily_import_event')) {
        wp_schedule_event(strtotime('00:00:00'), 'daily', 'wpkit_daily_import_event');
    }
}
add_action('wp', 'wpkit_schedule_import');

add_action('wpkit_daily_import_event', 'wpkit_import_posts_from_api');

Этот код регистрирует ежедневное событие wpkit_daily_import_event, которое вызывает функцию импорта.

Уведомления об ошибках через email

Для оперативного реагирования полезно получать уведомления на почту администратора в случае ошибок. Для этого можно расширить функцию импорта:

function wpkit_import_posts_from_api_with_email() {
    $result = wpkit_import_posts_from_api();
    if (!$result) {
        $admin_email = get_option('admin_email');
        wp_mail($admin_email, 'Ошибка импорта WPKit', 'При импорте данных произошла ошибка. Проверьте логи сервера.');
    }
}

add_action('wpkit_daily_import_event', 'wpkit_import_posts_from_api_with_email');

Использование плагинов для расширенной функциональности

Хотя самостоятельная реализация даёт полный контроль, для сложных сценариев стоит рассмотреть готовые решения. Например:

  • WPRemark — плагин с поддержкой автоматического импорта и расширенного логирования
  • Expert Review — для импорта и обработки отзывов с внешних источников
  • My Popup — для уведомления администраторов и пользователей о статусе импорта

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

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

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

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

Эти меры помогут сделать импорт стабильным и безопасным.

Выводы

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

Как создать массовое сообщение в WordPress с помощью PHP
16.11.2025
Как создать свой шорткод для WordPress
27.11.2025
Как отключить Gutenberg и оставить классический редактор в WordPress
25.02.2026
Как настроить автоматическое удаление старых записей в WordPress
15.02.2026
Как изменить URL авторского текста в WordPress
22.02.2026