Перейти к содержанию

Категории и импорт небольшого каталога

Оглавление серии

Категория помогает найти группу товаров, а импорт переносит небольшую таблицу значений в каталог. Эти действия удобно изучать вместе: у «Полки» появятся три известные позиции и понятные ветки «Вёрстка» и «Контент». Мы сохраним созданный GRID-PDF, добавим FORM-ZIP и URL-TXT, затем объясним, почему повторная загрузка CSV требует выбора между созданием и обновлением.

После урока каталог будет содержать три простых цифровых товара с устойчивыми SKU и ценами 12, 8 и 5. Файлы downloads пока не привязаны, как было оговорено во втором уроке. Импорт в подготовке курса не выполнялся; таблица — авторские исходные данные, а результаты панели являются ожидаемыми.

Категория имеет иерархию

Создайте категорию «Вёрстка», затем дочерние «CSS» и «HTML». «Конспект CSS Grid» относится к CSS, «Шаблон формы» — к HTML. «Памятка адресов» относится к отдельной категории «Контент». Иерархия помогает объяснить ассортимент: похожие темы собираются рядом, но товары не становятся вариантами друг друга.

Категории и атрибуты различаются. Категория отвечает, в какую группу входит продукт. Атрибут описывает свойство позиции, например комплект Basic или Extended. Если создать категории «Basic» и «Extended» только ради выбора комплекта на странице, покупатель не получит настоящую variation. Такой выбор изучим в следующем уроке отдельно.

Название категории предназначено человеку, slug — адресу и интеграциям. Для небольшой лаборатории можно выбрать layout, css, html и content. Не переименовывайте slug после каждого изменения подписи. Если в будущем адрес категории уже используется, изменение требует отдельного перенаправления и проверки ссылок.

CSV задаёт значения по колонкам

В Products → All Products найдите Import. Подготовленный fixtures/products.csv использует UTF-8 и стандартные имена колонок. Полный файл содержит три строки, поэтому его легко сопоставить с panel result.

Type,SKU,Name,Published,Is featured?,Visibility in catalog,Short description,Description,Tax status,In stock?,Sold individually?,Regular price,Categories,Download limit,Download expiry days
"simple, virtual, downloadable",GRID-PDF,Конспект CSS Grid,1,0,visible,Адаптивная сетка карточек.,Учебный текст: один конспект; язык русский; лицензия личная; обновления не обещаны.,none,1,1,12.00,Вёрстка > CSS,3,30
"simple, virtual, downloadable",FORM-ZIP,Шаблон формы,1,0,visible,Пример доступной HTML-формы.,Учебный ZIP с HTML и пояснением; без серверной обработки.,none,1,1,8.00,Вёрстка > HTML,3,30
"simple, virtual, downloadable",URL-TXT,Памятка адресов,1,0,visible,Стабильные адреса небольшого сайта.,Учебная текстовая памятка; лицензия личная.,none,1,1,5.00,Контент,3,30

У Type записано simple, virtual, downloadable. Колонка Published равна единице — товары должны стать опубликованными в локальной витрине. Это решение для данной лаборатории. CSV нельзя бездумно переносить в рабочий магазин: импортированный каталог может сразу стать доступным посетителям. Для черновиков текущий формат использует другое значение, описанное в официальной документации.

Categories содержит Вёрстка > CSS или Вёрстка > HTML. Знак > обозначает вложенность, а не часть обычного имени категории. Поле с запятыми заключается в двойные кавычки, поскольку CSV использует запятую как разделитель. Например, Type с тремя значениями — одно поле строки, а не три разные колонки.

In stock, Sold individually и Is featured используют числа один/ноль для boolean. Не подставляйте произвольно «да» и «нет», если выбранная импорт-схема ожидает числовые значения. Regular price содержит число без знака валюты. Общие правила описаны в Product CSV Importer and Exporter.

В файле намеренно нет Images и Download URL. Ссылки на uploads зависят от вашей локальной установки. Если вставить чужой URL, importer может обратиться к внешнему источнику или товар получит чужое вложение. Мы сначала импортируем предметные сведения, а изображения и защищённые файлы привязываем контролируемо в соответствующих уроках.

Первый товар обновляется по SKU

GRID-PDF уже создан вручную. На первом шаге импорта включите Update existing products. Сопоставьте колонки с предложенными полями, особенно SKU, Type, Regular price и Categories. Импорт должен найти существующую позицию по артикулу и добавить две новые. После завершения ожидается три товара, а не четыре с двумя одинаковыми «Конспектами».

Не подставляйте внутренний ID из чужого образца. Новый Product получает ID вашей базы. SKU выбран нами и переживает перенос в другое окружение, если соблюдены ограничения уникальности. Это помогает сделать course fixtures понятными без заранее существующих WordPress records.

Если importer сообщает, что SKU уже существует, сначала выясните выбранный режим и состояние каталога. Повторное нажатие Import не является универсальным исправлением. При создании без обновления одинаковый артикул должен вызвать конфликт; при обновлении меняются соответствующие поля существующего товара. Ошибку нужно прочитать, а не обходить случайным суффиксом -2, разрушая связь с дальнейшими уроками.

После импорта откройте каждый Product и сравните short/full descriptions, категорию, virtual/downloadable и цену. Сводное число «успешно импортировано три» не подтверждает корректность каждой колонки. Например, неправильно сопоставленный Description может оставить карточку почти пустой, хотя запись создана. Маленький набор выбран именно для такой предметной сверки.

Экспорт помогает сравнить, но не сохраняет магазин целиком

Теперь можно экспортировать эти три товара стандартным tool. Откройте полученный CSV и сопоставьте SKU и цены с входным файлом. В экспорте появятся дополнительные поля и IDs, назначенные установкой. Различие длины таблиц нормально: исходный file содержит только нужные настройки, а export отражает более полный Product record.

Экспорт каталога не является backup всего WordPress. Он не переносит все заказы, аккаунты, permissions, настройки страниц и защищённые файлы. Поэтому последняя глава отдельно рассматривает базу и uploads. Утверждение «товары сохранены» должно точно означать сохранение табличных свойств, а не восстановимость магазина одним CSV.

Для массового обновления удобно оставить только выбранные columns, но сначала понять, что происходит с отсутствующими и пустыми значениями в текущем importer. Пустое поле может быть осмысленным удалением, а не просьбой ничего не менять. Наш полный небольшой fixture не пытается универсально описать partial sync чужого каталога.

SKU помогает заметить ошибку ещё до появления красивой карточки. Допустим, в строке FORM-ZIP цена стала 80 вместо 8, но название осталось прежним. Импортёр не обязан понимать, что это опечатка: значение является допустимым числом. Сверьте три пары SKU и цены после сопоставления колонок и после будущего импорта. Такая предметная проверка связывает входную таблицу с итоговыми товарами. Она полезнее одного сообщения об успешном завершении, которое подтверждает обработку файла, но не правильность авторского замысла.

Ожидаемое завершение урока — GRID-PDF в «Вёрстка → CSS», FORM-ZIP в «Вёрстка → HTML», URL-TXT в «Контент», цены 12.00, 8.00 и 5.00. Источник данных один, имена не меняются при переходе к корзине. Для самостоятельного опыта исправьте описание URL-TXT в копии CSV и выполните update в своей лаборатории: измениться должен существующий товар, а не количество позиций. Затем верните исходное описание, сохраняя известное состояние для следующих шагов.