Импорт данных из CSV-файлов является одной из частых задач при работе с WordPress, особенно если вы управляете большим количеством контента или товаров. В этой статье мы подробно рассмотрим, как создать автоматический импорт CSV в WordPress с помощью собственного кода. Это позволит вам гибко настраивать процесс импорта и интегрировать его в ваши задачи.
Почему стоит создавать собственный импорт CSV в WordPress
Многие используют готовые плагины для импорта CSV, например, WP All Import или Really Simple CSV Importer. Однако у них бывают ограничения в функционале, они могут быть слишком тяжелыми или дорогими для ваших задач. Создавая собственный импорт, вы получаете:
- Полный контроль над процессом импорта;
- Возможность оптимизировать код под свои нужды и объемы данных;
- Свободу для интеграции с другими системами и автоматизации;
- Минимум сторонних зависимостей и улучшенную производительность.
В этом руководстве мы рассмотрим пример, как читать CSV и создавать записи типа «Пост» или кастомные записи.
Подготовка CSV-файла для импорта
Прежде всего, нужно правильно подготовить CSV-файл. Обычно в первой строке идут заголовки столбцов, например:
post_title,post_content,post_date,custom_field_1
Название,Описание,2024-06-01,Значение
Важно, чтобы кодировка файла была UTF-8 без BOM, а разделитель — запятая или точка с запятой, в зависимости от ваших настроек.
Если есть специальные поля (кастомные мета-поля), их можно тоже включать в CSV и обрабатывать отдельно.
Пример функции для импорта CSV в WordPress (wpexamples_import_csv)
Далее пример функции, которая читает CSV и добавляет посты с указанными полями:
function wpexamples_import_csv($csv_file_path) {
if (!file_exists($csv_file_path)) {
return new WP_Error('file_not_found', 'CSV файл не найден');
}
$handle = fopen($csv_file_path, 'r');
if (!$handle) {
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);
if (!$data) continue;
// Подготавливаем массив для wp_insert_post
$post_data = array(
'post_title' => sanitize_text_field($data['post_title']),
'post_content' => sanitize_textarea_field($data['post_content']),
'post_status' => 'publish',
'post_date' => sanitize_text_field($data['post_date']),
'post_type' => 'post'
);
$post_id = wp_insert_post($post_data);
if (is_wp_error($post_id)) {
// Логируем ошибку или обрабатываем
continue;
}
// Обработка кастомных полей
if (!empty($data['custom_field_1'])) {
update_post_meta($post_id, 'custom_field_1', sanitize_text_field($data['custom_field_1']));
}
}
fclose($handle);
return true;
}
Эту функцию можно запускать вручную или через крон для автоматизации.
Автоматизация импорта через WP-Cron
Чтобы импорт запускался автоматически, например, раз в день, используйте WP-Cron. Вот пример регистрации задачи:
function wpexamples_schedule_import() {
if (!wp_next_scheduled('wpexamples_daily_csv_import')) {
wp_schedule_event(time(), 'daily', 'wpexamples_daily_csv_import');
}
}
add_action('wp', 'wpexamples_schedule_import');
add_action('wpexamples_daily_csv_import', function() {
$csv_path = WP_CONTENT_DIR . '/uploads/import/data.csv';
wpexamples_import_csv($csv_path);
});
Так вы настроите регулярный импорт без вашего вмешательства.
Советы по обработке больших CSV и оптимизации
Если CSV большой (тысячи записей), рекомендуем:
- Обрабатывать файл по частям, например, по 100 строк, чтобы избежать таймаутов;
- Использовать транзакции базы данных или временное сохранение прогресса;
- Логировать ошибки и успешные импорты для отладки;
- Оптимизировать запросы, использовать wp_defer_term_counting(true) и wp_defer_comment_counting(true) во время импорта;
- Рассмотреть использование плагина Clearfy Pro для оптимизации производительности сайта во время импорта.
Использование плагинов для упрощения процесса
Если вы хотите упростить задачу и получить расширенный функционал, можно использовать плагины с поддержкой импорта CSV:
- WP All Import — мощный и гибкий, поддерживает любые типы записей и кастомные поля;
- Really Simple CSV Importer — легкий и простой, подходит для базового импорта;
- WP Remark — если вам нужны динамические формы и интеграция с импортом;
- Эти плагины помогут, если вы не хотите писать код, но для автоматизации и кастомизации лучший путь — собственный скрипт.
Заключение
Создание автоматического импорта CSV в WordPress на собственном коде — это мощное решение, которое позволяет гибко управлять контентом и интегрироваться с внешними системами. Следуя этому руководству, вы сможете настроить процесс под свои задачи и избежать зависимости от сторонних плагинов.
Если возникнут вопросы или нужна помощь с доработкой кода, рекомендуем обратиться к сообществу разработчиков или профессионалам. Удачного импорта!