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

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

Почему стандартный импорт CSV не всегда подходит

В стандартных плагинах для импорта CSV, таких как WP All Import или встроенные решения, часто предусмотрена только простая структура данных: одна строка — одна запись, где поля — это простые значения. Но что делать, если у вас есть сложные поля — массивы, вложенные объекты, повторяющиеся группы полей?

Например, у вас есть кастомный тип записи product с метаполями, где одно из полей — список характеристик, каждая характеристика — массив с названием и значением. Стандартный импорт просто не сможет корректно разобрать и записать такую структуру.

Поэтому нам нужно написать свой механизм разбора CSV и сохранения сложных данных в метаполя WordPress.

Требования к CSV и его разбор

Для начала опишем структуру CSV. Предположим, что у вас есть следующие колонки:

  • product_name — название продукта
  • price — цена
  • features — характеристики, записанные в формате JSON

Пример значения в колонке features:

[{"name":"Вес","value":"1 кг"},{"name":"Цвет","value":"Красный"}]

Использование JSON в CSV позволяет передавать сложные вложенные структуры.

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

Пример кода для автоматического импорта CSV с поддержкой сложных полей

Ниже пример функции с префиксом wpcodex_, которая импортирует данные из CSV и сохраняет их в кастомный тип записи product с метаполями:

function wpcodex_import_products_from_csv($csv_file_path) {
    if (!file_exists($csv_file_path)) {
        return new WP_Error('file_not_found', 'CSV файл не найден');
    }

    if (($handle = fopen($csv_file_path, 'r')) === false) {
        return new WP_Error('file_open_error', 'Не удалось открыть CSV файл');
    }

    $header = fgetcsv($handle, 0, ',');
    if (!$header) {
        fclose($handle);
        return new WP_Error('empty_file', 'CSV файл пустой или неверный формат');
    }

    while (($row = fgetcsv($handle, 0, ',')) !== false) {
        $data = array_combine($header, $row);

        // Создаем или обновляем продукт
        $post_data = array(
            'post_title'  => sanitize_text_field($data['product_name']),
            'post_type'   => 'product',
            'post_status' => 'publish'
        );

        // Пытаемся найти уже существующий пост по названию
        $existing = get_page_by_title($post_data['post_title'], OBJECT, 'product');
        if ($existing) {
            $post_data['ID'] = $existing->ID;
            wp_update_post($post_data);
            $post_id = $existing->ID;
        } else {
            $post_id = wp_insert_post($post_data);
        }

        if (is_wp_error($post_id)) {
            continue; // ошибка создания поста
        }

        // Сохраняем цену
        if (isset($data['price'])) {
            update_post_meta($post_id, 'price', floatval($data['price']));
        }

        // Обрабатываем характеристики (features) из JSON
        if (!empty($data['features'])) {
            $features = json_decode($data['features'], true);
            if (json_last_error() === JSON_ERROR_NONE && is_array($features)) {
                update_post_meta($post_id, 'features', $features);
            }
        }
    }

    fclose($handle);
    return true;
}

В этом примере мы:

  • Открываем CSV файл и читаем заголовки и строки
  • Создаем или обновляем записи типа product по названию
  • Сохраняем цену как метаполе
  • Декодируем JSON строку из поля features и сохраняем как массив в метаполе

Автоматизация запуска импорта по расписанию

Чтобы импорт происходил автоматически, можно настроить WP-Cron задачу.

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

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

add_action('wpcodex_hourly_import_event', 'wpcodex_run_import_task');

function wpcodex_run_import_task() {
    $csv_path = WP_CONTENT_DIR . '/uploads/products.csv'; // путь к вашему CSV
    wpcodex_import_products_from_csv($csv_path);
}

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

Плагины для упрощения импорта и расширения функционала

Если хочется готового решения с GUI и поддержкой сложных структур, рекомендую обратить внимание на:

  • WP All Import — мощный плагин с поддержкой кастомных типов, полей и сложных данных, включая JSON-поля
  • Clearfy Pro — плагин для оптимизации и управления WordPress, в том числе позволяет расширить возможности импорта и очистки данных

Однако, если вы хотите именно тонко контролировать процесс, собственный код — лучший способ.

Обработка ошибок и валидация данных при импорте

В реальных проектах важно предусмотреть обработку ошибок:

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

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

Это позволит быстро выявлять проблемы с данными и корректировать CSV без остановки импорта.

Заключение

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

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

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

Автоматический экспорт постов в XML в WordPress: практическое руководство
31.12.2025
Как создать автоматический импорт CSV с поддержкой полей сложной структуры в WordPress
26.02.2026
WooCommerce: как автоматически удалять товары из корзины после успешной оплаты
03.06.2026
WordPress: как создать страницу настроек в плагине с использованием Settings API
26.12.2025
Автоматический импорт из Twitter в WordPress: пошаговое руководство
16.04.2026