Если вам нужно регулярно загружать большое количество данных в WordPress — например, товары, записи или пользовательские поля — ручной ввод занимает слишком много времени. Автоматический импорт из CSV-файлов становится отличным решением для таких задач. В этой статье подробно разберём, как реализовать автоматический импорт из CSV в WordPress с минимальными усилиями и с помощью примеров кода.
Почему автоматический импорт CSV важен для WordPress
CSV (Comma-Separated Values) — один из самых распространённых форматов для хранения табличных данных. Многие ERP-системы, CRM, учётные программы и маркетплейсы позволяют экспортировать данные именно в CSV. Автоматизация процесса импорта помогает:
- Экономить время на ввод данных;
- Избежать ошибок ручного копирования;
- Обновлять информацию на сайте без участия человека;
- Поддерживать актуальность контента и каталога товаров.
WordPress в базовой поставке не содержит встроенных средств для импорта CSV с автоматическим запуском, поэтому приходится либо использовать плагины, либо писать собственные скрипты.
Обзор плагинов для автоматического импорта CSV
WP All Import
Один из самых популярных плагинов для импорта любых данных из CSV и XML. Позволяет гибко настраивать маппинг полей и поддерживает автоматический запуск импорта по расписанию (cron). Имеет платную версию с расширенным функционалом.
Really Simple CSV Importer
Бесплатный и простой плагин для импорта записей из CSV. Не обладает автоматическим запуском по cron, но можно расширить его возможностями с помощью кода.
WP Ultimate CSV Importer
Поддерживает импорт постов, пользователей, WooCommerce продуктов и кастомных типов записей. Имеет опцию автоматического импорта.
Если вы хотите полностью контролировать процесс и не зависеть от плагинов, можно написать собственный скрипт импорта с автозапуском.
Как написать автозапускаемый импорт CSV в WordPress: пример кода
Для примера создадим функцию, которая читает CSV из определённой папки на сервере, парсит данные и создаёт записи в кастомном типе post — например, "product".
Шаг 1. Подготовка CSV
Файл должен содержать заголовки колонок, например:
title,description,price
Товар 1,Описание товара 1,1000
Товар 2,Описание товара 2,1500
Шаг 2. Функция импорта
function wpcore_import_csv_to_products() {
$csv_file = ABSPATH . 'wp-content/uploads/import/products.csv';
if (!file_exists($csv_file)) {
error_log('WPcore Import CSV: файл не найден ' . $csv_file);
return;
}
if (($handle = fopen($csv_file, 'r')) !== false) {
$header = fgetcsv($handle, 1000, ',');
while (($row = fgetcsv($handle, 1000, ',')) !== false) {
$data = array_combine($header, $row);
// Проверяем наличие обязательных полей
if (empty($data['title']) || empty($data['price'])) continue;
// Создаём запись
$post_id = wp_insert_post(array(
'post_title' => sanitize_text_field($data['title']),
'post_content' => sanitize_textarea_field($data['description']),
'post_status' => 'publish',
'post_type' => 'product',
));
if (!is_wp_error($post_id)) {
// Сохраняем цену как мета поле
update_post_meta($post_id, '_price', floatval($data['price']));
}
}
fclose($handle);
}
}
Шаг 3. Автоматический запуск по расписанию через WP-Cron
Добавим задачу, которая будет запускать импорт, например, каждый час.
function wpcore_schedule_csv_import() {
if (!wp_next_scheduled('wpcore_hourly_csv_import')) {
wp_schedule_event(time(), 'hourly', 'wpcore_hourly_csv_import');
}
}
add_action('wp', 'wpcore_schedule_csv_import');
add_action('wpcore_hourly_csv_import', 'wpcore_import_csv_to_products');
Обработка ошибок и безопасность
В реальных проектах стоит предусмотреть:
- Валидацию и очистку данных из CSV;
- Логи выполнения импорта с возможностью уведомления администратора;
- Проверку дубликатов, чтобы не создавать одинаковые записи несколько раз;
- Безопасное хранение CSV-файлов вне публичного доступа;
- Ограничение прав на запуск импорта только для авторизованных пользователей или по ключу.
Пример расширения: импорт с обновлением существующих записей
Чтобы избежать дублирования, можно проверять, существует ли уже запись с таким названием и обновлять её.
function wpcore_import_csv_update_products() {
$csv_file = ABSPATH . 'wp-content/uploads/import/products.csv';
if (!file_exists($csv_file)) return;
if (($handle = fopen($csv_file, 'r')) !== false) {
$header = fgetcsv($handle, 1000, ',');
while (($row = fgetcsv($handle, 1000, ',')) !== false) {
$data = array_combine($header, $row);
if (empty($data['title']) || empty($data['price'])) continue;
$existing = get_page_by_title($data['title'], OBJECT, 'product');
$post_data = array(
'post_title' => sanitize_text_field($data['title']),
'post_content' => sanitize_textarea_field($data['description']),
'post_status' => 'publish',
'post_type' => 'product',
);
if ($existing) {
$post_data['ID'] = $existing->ID;
$post_id = wp_update_post($post_data);
} else {
$post_id = wp_insert_post($post_data);
}
if (!is_wp_error($post_id)) {
update_post_meta($post_id, '_price', floatval($data['price']));
}
}
fclose($handle);
}
}
Использование плагина WPShop My Popup для уведомлений об импорте
Если хотите уведомлять админа или редакторов сайта о результатах импорта, можно интегрировать отправку всплывающего уведомления через плагин My Popup. Это позволит оперативно оповещать о статусе процесса без захода в логи.
Выводы и советы
Автоматический импорт из CSV в WordPress — необходимая функция для многих сайтов с большим объёмом данных. Используйте готовые решения, если они подходят, или реализуйте свой скрипт для полного контроля. Не забывайте про безопасность, валидацию данных и информирование администраторов.