Диагностика задачи: зачем нужен кастомный экспорт товаров из WooCommerce
Стандартные инструменты WooCommerce для экспорта товаров часто бывают ограничены по функционалу: нельзя выбрать все нужные поля, формат не подходит для интеграции с внешними системами, отсутствует фильтрация по сложным условиям. В таких случаях нужен кастомный экспорт товаров в CSV, реализованный через собственный код, без сторонних плагинов.
Анализ стандартных возможностей WooCommerce и их ограничения
WooCommerce предлагает базовый экспорт через Инструменты > Экспорт, который выводит только стандартные поля и не позволяет гибко настраивать формат. Плагины расширяют функционал, но часто перегружают сайт и создают зависимости. Кастомный код позволяет:
- Выбрать конкретные поля товара и метаданные;
- Настроить структуру CSV по требованиям интеграции;
- Добавить фильтры (например, по категориям, статусу, дате);
- Минимизировать нагрузку и избежать конфликтов с плагинами.
Пошаговое решение: создание кастомного экспорта товаров в CSV
1. Создаем страницу экспорта в админке
Добавим пункт меню для запуска экспорта:
add_action('admin_menu', function() {
add_submenu_page('woocommerce', 'Экспорт товаров CSV', 'Экспорт CSV', 'manage_woocommerce', 'custom-woocommerce-export', 'custom_woocommerce_export_page');
});
function custom_woocommerce_export_page() {
if (!current_user_can('manage_woocommerce')) {
wp_die('Доступ запрещен');
}
if (isset($_POST['export_csv'])) {
custom_woocommerce_export_process();
}
echo '<h1>Экспорт товаров WooCommerce в CSV</h1>';
echo '<form method="post">';
echo '<p><button type="submit" name="export_csv" class="button button-primary">Скачать CSV</button></p>';
echo '</form>';
}2. Реализуем функцию экспорта товаров
Собираем данные о товарах из базы и формируем CSV:
function custom_woocommerce_export_process() {
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=woocommerce-export-' . date('Y-m-d') . '.csv');
$output = fopen('php://output', 'w');
// Заголовки CSV (пример: ID, Название, Цена, Категории, Артикул)
fputcsv($output, ['ID', 'Название', 'Цена', 'Категории', 'Артикул']);
$args = [
'post_type' => 'product',
'posts_per_page' => -1,
'post_status' => 'publish',
];
$products = get_posts($args);
foreach ($products as $product_post) {
$product = wc_get_product($product_post->ID);
$categories = wp_get_post_terms($product_post->ID, 'product_cat', ['fields' => 'names']);
$row = [
$product->get_id(),
$product->get_name(),
$product->get_price(),
implode('|', $categories),
$product->get_sku(),
];
fputcsv($output, $row);
}
fclose($output);
exit;
}Проверка результата: как убедиться, что экспорт работает правильно
- Перейдите в WooCommerce > Экспорт CSV;
- Нажмите кнопку «Скачать CSV»;
- Откройте скачанный файл в любом редакторе CSV;
- Проверьте, что содержатся все опубликованные товары, корректно отображаются названия, цены, категории и артикулы;
- Убедитесь, что символы кодируются в UTF-8 и разделитель — запятая (проверьте в редакторе таблиц).
Частые ошибки и их устранение при кастомном экспорте
- Пустой CSV файл: проверьте правильность аргументов в
get_posts, статус и тип поста; - Кодировка и символы: если русский язык отображается некорректно, убедитесь, что заголовок
Content-Typeпередается сcharset=utf-8и редактор таблиц открывает файл с UTF-8; - Ошибка доступа: функция
current_user_can('manage_woocommerce')ограничивает доступ. Проверьте роль пользователя; - Перегрузка памяти и таймаут: при большом количестве товаров используйте пакетную обработку с пагинацией.
Практические советы по оптимизации и безопасности
- Для больших каталогов используйте WP_Query с пагинацией, чтобы выгружать товары по частям и не перегружать сервер;
- Перед выгрузкой можно добавить фильтры, например, дата создания товара или категория, чтобы выгружать только нужный набор;
- Ограничьте доступ к странице экспорта только админам или менеджерам WooCommerce;
- Для повышения производительности отключите в админке ненужные хуки и фильтры на время экспорта;
- Храните экспортируемые данные временно в оперативной памяти, чтобы не захламлять сервер файлами.
Сравнение вариантов экспорта товаров в WooCommerce
| Метод | Преимущества | Недостатки | Пример |
|---|---|---|---|
| Стандартный экспорт WooCommerce | Простота, встроенный функционал | Ограниченный функционал, нельзя кастомизировать поля | WooCommerce > Инструменты > Экспорт |
| Плагины для экспорта | Расширенные возможности, фильтры, планировщик задач | Нагрузка на сайт, зависимости, возможные конфликты | WooCommerce CSV Export, WP All Export |
| Кастомный код (текущий) | Гибкость, минимальная нагрузка, полный контроль | Требует навыков разработки, поддержка кода на владельце | PHP-функция с wp_get_posts, wc_get_product |