Если вы управляете интернет-магазином на базе WordPress, особенно с использованием WooCommerce, то регулярный импорт большого количества товаров из CSV-файлов — частая задача. В этой статье мы подробно разберем, как автоматизировать процесс импорта продуктов из CSV-файла в WordPress, чтобы сэкономить время и избежать ошибок ручного ввода.
Почему автоматический импорт продуктов из CSV важен для WooCommerce
Импорт CSV позволяет быстро обновлять каталог товаров, добавлять новые позиции, корректировать цены и описания. Ручной ввод при большом ассортименте не практичен и приводит к ошибкам. Автоматизация с помощью кода или специальных плагинов обеспечивает:
- Экономию времени при обновлении каталога.
- Минимизацию ошибок ввода данных.
- Возможность регулярного обновления через CRON.
Далее рассмотрим, как реализовать подобный функционал.
Обзор популярных плагинов для импорта CSV в WooCommerce
Сначала рассмотрим несколько популярных и надежных плагинов, которые подходят для импорта CSV:
- WP All Import — мощный и гибкий, поддерживает автоматический импорт по расписанию и работу со сложными структурами данных. Имеет удобный визуальный интерфейс.
- Product Import Export for WooCommerce — бесплатный плагин с базовым функционалом импорта и экспорта товаров.
- WooCommerce CSV Importer — плагин от WooCommerce с базовыми возможностями импорта.
Для автоматизации с помощью кода можно использовать WP All Import Pro с дополнением для программного запуска или написать собственный скрипт.
Создание собственного автоматического импорта CSV через код в WordPress
Если вы хотите гибко контролировать процесс и интегрировать импорт в свою систему, можно реализовать собственный парсер CSV и создание товаров через WP функции.
1. Чтение CSV файла
Для начала нам нужно считать CSV файл. Для надежности используем встроенную функцию PHP fgetcsv(). Предположим, файл хранится в wp-content/uploads/import/products.csv.
function wpmanual_read_csv($filepath) {
$rows = [];
if (!file_exists($filepath)) {
return $rows;
}
if (($handle = fopen($filepath, 'r')) !== false) {
$header = fgetcsv($handle, 1000, ',');
while (($data = fgetcsv($handle, 1000, ',')) !== false) {
$rows[] = array_combine($header, $data);
}
fclose($handle);
}
return $rows;
}
Эта функция возвращает массив ассоциативных массивов с данными из CSV.
2. Создание продукта WooCommerce программно
Далее создадим функцию, которая принимает данные продукта и создает/обновляет товар.
function wpmanual_create_or_update_product($product_data) {
if (empty($product_data['sku'])) {
return;
}
$product_id = wc_get_product_id_by_sku($product_data['sku']);
if ($product_id) {
$product = wc_get_product($product_id);
} else {
$product = new WC_Product_Simple();
}
$product->set_name($product_data['name']);
$product->set_sku($product_data['sku']);
$product->set_regular_price($product_data['price']);
$product->set_description($product_data['description']);
$product->set_stock_quantity((int)$product_data['stock']);
$product->set_manage_stock(true);
$product->save();
}
Обратите внимание, что для работы с WooCommerce нужно, чтобы плагин был активен, и код запускался в правильном контексте WordPress.
3. Основной импорт с обработкой всех продуктов
Теперь объединим чтение CSV и создание продуктов в одну функцию:
function wpmanual_import_products_from_csv() {
$filepath = WP_CONTENT_DIR . '/uploads/import/products.csv';
$products = wpmanual_read_csv($filepath);
foreach ($products as $product_data) {
wpmanual_create_or_update_product($product_data);
}
}
Эту функцию можно запускать вручную или добавить в CRON-задачу для автоматического обновления.
Как запускать импорт по расписанию с помощью WP-Cron
Чтобы импорт запускался автоматически, настроим WP-Cron. Например, создадим событие, которое будет запускать импорт каждый день.
add_action('wpmanual_daily_import_event', 'wpmanual_import_products_from_csv');
function wpmanual_activate_cron() {
if (!wp_next_scheduled('wpmanual_daily_import_event')) {
wp_schedule_event(time(), 'daily', 'wpmanual_daily_import_event');
}
}
add_action('wp', 'wpmanual_activate_cron');
Это создаст ежедневное задание для импорта продуктов из CSV.
Обработка изображений и дополнительных полей
Если в вашем CSV есть URL изображений, то можно дополнительно загружать и прикреплять их к товарам.
function wpmanual_set_product_image($product_id, $image_url) {
require_once(ABSPATH . 'wp-admin/includes/file.php');
require_once(ABSPATH . 'wp-admin/includes/media.php');
require_once(ABSPATH . 'wp-admin/includes/image.php');
$tmp = download_url($image_url);
if (is_wp_error($tmp)) {
return;
}
$file_array = array(
'name' => basename($image_url),
'tmp_name' => $tmp
);
$id = media_handle_sideload($file_array, $product_id);
if (is_wp_error($id)) {
@unlink($file_array['tmp_name']);
return;
}
set_post_thumbnail($product_id, $id);
}
Далее вызывайте эту функцию из wpmanual_create_or_update_product, передавая URL изображения из CSV.
Заключение
Автоматический импорт продуктов из CSV в WordPress с WooCommerce позволяет значительно упростить управление каталогом, особенно при большом количестве товаров. Вы можете использовать готовые решения, такие как WP All Import, или написать собственный скрипт с учетом ваших бизнес-процессов.
Если хотите расширенный функционал импорта и автоматизации, обратите внимание на плагин WP All Import с их официального магазина.