Почему автоматизация экспорта товаров важна для WooCommerce
При большом ассортименте товаров в WooCommerce регулярный экспорт данных необходим для синхронизации с другими системами, аналитики или резервного копирования. Ручное скачивание CSV или XML-файлов через админку становится неэффективным и подвержено ошибкам. Решение — автоматизировать процесс через WP-CLI, что позволяет запускать экспорт из командной строки, планировать по расписанию через cron и интегрировать в CI/CD.
Диагностика: как понять, что экспорт товаров нужно автоматизировать
- Экспорт занимает много времени и требует регулярного повторения;
- Ручной экспорт ведёт к ошибкам с кодировкой или неполному набору данных;
- Необходима интеграция с внешними системами, где нужен автоматический обмен файлами;
- Отсутствует прозрачность и контроль над процессом экспорта.
Пошаговое решение: создание и запуск экспорта через WP-CLI
1. Установка WP-CLI и подготовка среды
Убедитесь, что на сервере установлен WP-CLI. Проверить это можно командой:
wp --infoЕсли WP-CLI не установлен, следуйте официальной инструкции https://wp-cli.org/#installing.
2. Использование встроенной команды WooCommerce для экспорта
WooCommerce из коробки не предоставляет WP-CLI команду для экспорта товаров, но можно использовать плагины или написать собственный скрипт. Рассмотрим пример создания кастомной WP-CLI команды для экспорта товаров в CSV.
3. Пример кода для кастомной WP-CLI команды экспорта товаров
if (defined('WP_CLI') && WP_CLI) {
class WC_Export_Products_Command {
public function export($args, $assoc_args) {
$filename = isset($assoc_args['file']) ? $assoc_args['file'] : 'woocommerce-products-export.csv';
$products = wc_get_products(array('limit' => -1));
$csv_output = fopen('php://output', 'w');
if (!$csv_output) {
WP_CLI::error('Не удалось открыть поток для записи');
}
// Заголовки CSV
$headers = array('ID', 'Название', 'SKU', 'Цена', 'Статус');
$rows = [];
foreach ($products as $product) {
$rows[] = [
$product->get_id(),
$product->get_name(),
$product->get_sku(),
$product->get_price(),
$product->get_status(),
];
}
// Запись в файл
$file_path = ABSPATH . $filename;
$file = fopen($file_path, 'w');
fputcsv($file, $headers);
foreach ($rows as $row) {
fputcsv($file, $row);
}
fclose($file);
WP_CLI::success("Экспорт товаров завершён. Файл сохранён: $file_path");
}
}
WP_CLI::add_command('wc-export-products', 'WC_Export_Products_Command');
}Сохраните этот код в файле wp-content/mu-plugins/wc-export-products-cli.php (создайте папку mu-plugins если её нет). Теперь доступна команда:
wp wc-export-products export --file=products.csv4. Настройка cron для автоматического экспорта
Добавьте в crontab пользователя, под которым работает сервер, запись:
0 2 * * * /usr/bin/wp wc-export-products export --file=products-$(date +\%Y\%m\%d).csv --path=/var/www/html/wordpress > /dev/null 2>&1Это выполнит экспорт каждый день в 2:00 и сохранит файл с датой.
Проверка результата после внедрения
- Команда
wp wc-export-products exportуспешно выполняется без ошибок; - Файл CSV с товарами появляется в корне сайта или указанной директории;
- В Cron логе нет ошибок, файл создаётся по расписанию;
- Открытие CSV в Excel или любом текстовом редакторе показывает корректные данные.
Частые ошибки и их исправление
- Ошибка открытия файла для записи: Проверьте права на директорию, где сохраняется CSV. PHP-процесс должен иметь право записи.
- Пустой файл или нет товаров: Убедитесь, что в WooCommerce есть опубликованные товары и вызов
wc_get_products(['limit'=>-1])возвращает результаты. - Ошибка «wp: command not found» в cron: Используйте полный путь к wp-cli (узнать с помощью
which wp), либо в cron-скрипте задайте PATH. - Некорректная кодировка CSV: По умолчанию используется UTF-8. Для Excel в Windows можно добавить BOM, например,
fwrite($file, "\xEF\xBB\xBF");после открытия файла.
Практические советы по безопасности и производительности
- Не сохраняйте экспортируемые файлы в директории, доступные по URL, без защиты — используйте .htaccess или переместите файлы вне публичной части.
- Ограничьте доступ к WP-CLI и cron только доверенным пользователям.
- При большом количестве товаров разбивайте экспорт на части, чтобы не превышать лимиты памяти и времени выполнения.
- Для интеграции с внешними системами используйте защищённые SFTP или API для передачи файлов, а не прямое открытие файлов в интернете.
Сравнение способов экспорта товаров WooCommerce
| Способ | Плюсы | Минусы |
|---|---|---|
| Экспорт через админку WooCommerce | Простота, не требует навыков | Ручной процесс, нет автоматизации, риск ошибок |
| Плагины экспорта (например, Product CSV Import Suite) | Больше опций, удобный интерфейс | Платные, нагрузка на сайт |
| WP-CLI с кастомной командой | Автоматизация, гибкость, легко интегрировать с cron | Требует навыков командной строки, настройка |