=== KnitCat Import Export ===
Автор: KnitCat Plugins (https://knitcat.ru)
Версия: 1.9.0
Требуется PHP: 8.0+

ЧТО ДЕЛАЕТ
Вкладка "Импорт": загрузка прайс-листа поставщика (.xlsx) → выбор нужных
листов → сопоставление строк с товарами WooCommerce по артикулу (SKU) →
округление цены (опционально) → таблица проверки с чекбоксами (найдено /
не найдено / увеличится / уменьшится) → применение только отмеченных строк.

Вкладка "Экспорт": поиск родительских товаров → выбор нужных колонок
переключателями, с возможностью переименовать заголовок каждой колонки →
настройка имени файла (префикс + дата + названия товаров) → выгрузка в
.xlsx (по одной строке на каждую вариацию, если товар вариативный).

НОВОЕ В 1.9.0 (по инструкции KNITCAT_ALL_PLUGINS_UPDATE_1.md, Дорожка A)
- Апдейтер обновлён до SDK 1.1.0: перед установкой пакета обновления
  дополнительно проверяются SHA-256 скачанного файла и хост загрузки
  (knitcat.ru) — при несовпадении или отсутствии хэша обновление
  отклоняется (fail-closed). ВНИМАНИЕ: обновления этого плагина перестанут
  устанавливаться, пока на сервере knitcat.ru/updates/api.php не применён
  соответствующий патч, отдающий поле "sha256".
- SDK регистрации обновлён: исправлена ошибка в вычислении константы версии
  для AJAX-запроса регистрации (раньше для слага "knitcat-import-export"
  искалась несуществующая константа с задвоенным префиксом; теперь версия
  плагина в запросе регистрации определяется корректно).
- Плагин теперь жёстко зависит от активного KnitCat Woo Advanced: без него
  (или без функции knitcat_core_is_active()) модуль не загружается и
  показывается уведомление в админке вместо тихого отказа.
- Функции импорта и экспорта включаются только после бесплатной регистрации
  сайта на вкладке «Регистрация»; сама вкладка «Регистрация» и её AJAX
  доступны всегда, даже без регистрации.
- На вкладке «Регистрация» в заголовке вкладки теперь виден статус ✅/❌.
- Проверено: собственный register_setting() в плагине не используется
  (настройки сохраняются через собственные admin-post/AJAX обработчики с
  ручной sanitize_text_field/sanitize_key/intval на каждое поле), поэтому
  пункт чеклиста про sanitize_callback у register_setting() к этому плагину
  не относится.

НОВОЕ В 1.8.0
- Интеграция с хабом "KnitCat Plugins" приведена в полное соответствие с
  официальным шаблоном бренда (документ KNITCAT_PLUGIN_CONTEXT_2.md):
  - capability для меню и всех проверок прав — 'edit_shop_orders' (было
    'manage_woocommerce'/'manage_options'). Доступно администраторам и
    пользователям с ролью "Менеджер магазина".
  - Убрана запасная реализация родительского меню и knitcat_render_hub_page():
    родительское меню "KnitCat Plugins" создаёт только KnitCat Woo. Если
    KnitCat Woo не активен, пункт "Импорт Экспорт" просто не появится —
    это ожидаемое поведение по шаблону бренда.
  - Хук enqueue-скриптов сверяется по точному суффиксу
    'knitcat-plugins_page_knitcat-import-export'.
  - В карточку хаба ('knitcat_hub_plugins') добавлен ключ 'slug'.
  - Константы плагина переименованы по единому шаблону бренда:
    KNITCAT_IMPORT_EXPORT_VERSION / _FILE / _DIR / _URL (были PIT_VERSION
    и т.д.).
- Добавлены автообновления и регистрация сайта по стандартному SDK KnitCat:
  новая вкладка "Регистрация" на странице настроек (получение license_key,
  автообновления плагина через knitcat.ru).
- ВНИМАНИЕ: минимальная версия PHP повышена до 8.0 (использована в
  стандартных классах KnitCat_Updater / KnitCat_Registration). На PHP 7.4
  и ниже плагин работать не будет.

НОВОЕ В 1.7.0
- Интеграция с общим хабом "KnitCat Plugins" по стандартному шаблону бренда:
  плагин регистрирует свой пункт меню на приоритете 20 (после того как
  KnitCat Woo — главный плагин бренда — успевает создать родительское меню)
  и добавляет свою карточку на страницу хаба через фильтр 'knitcat_hub_plugins'.
- Если KnitCat Woo не активен, плагин создаёт родительское меню сам и
  использует собственную запасную реализацию knitcat_render_hub_page()
  (с гвардом function_exists — если позже активируется KnitCat Woo, его
  версия функции используется автоматически).

НОВОЕ В 1.6.1
- Исправлено: белая подложка карточки на вкладке "Экспорт" была слишком
  узкой — теперь занимает всю доступную ширину страницы (до 1100px).
- В имя файла теперь можно добавить названия выбранных родительских
  товаров вместо артикулов (например: export-2026-08-21-Носки-шерстяные.xlsx).

НОВОЕ В 1.6.0
- Имя xlsx-файла теперь собирается из частей: свой текст-префикс,
  опционально дата (ГГГГ-ММ-ДД), опционально артикулы выбранных товаров
  (до 5 штук, дальше — "-и-др"). Например: export-2026-08-21-VARSKU.xlsx.
- У каждой колонки экспорта можно задать своё название заголовка, которое
  попадёт в файл (пустое поле — используется название по умолчанию).
- Оба набора настроек (имя файла и подписи колонок) запоминаются между
  экспортами.

НОВОЕ В 1.5.0
- Плагин переименован в "KnitCat Import Export" (пункт меню в разделе
  "KnitCat Plugins" теперь называется "Импорт Экспорт").
- В экспорт добавлена колонка "Количество" (остаток на складе). Если у
  конкретной вариации остаток не ведётся отдельно — берётся остаток
  родительского товара. Включена по умолчанию.

НОВОЕ В 1.4.0
- Добавлена вкладка "Экспорт": поиск родительского товара (по названию или
  артикулу, можно выбрать несколько сразу), переключатели колонок (ID,
  Название, Название + вариация, Вариация, Краткое описание, Артикул, Цена),
  выгрузка в .xlsx. Для вариативных товаров — отдельная строка на каждую
  вариацию. Выбор колонок запоминается для следующего раза.

НОВОЕ В 1.3.0
- Товары с вариациями (у которых артикул указан только на родителе, а не на
  каждой вариации отдельно — частый случай для цвета/размера): цена теперь
  применяется сразу ко всем вариациям, и каждая вариация показывается в
  таблице проверки отдельной строкой со своей собственной текущей ценой
  (раньше показывался родитель с ценой 0).
- Таблица проверки разбита на сворачиваемые группы: "цена изменится"
  (развёрнута по умолчанию), "без изменений" и "не найдено" (свёрнуты).
- "Увеличится ⬆️" и "Уменьшится ⬇️" теперь разного цвета (красный / зелёный).
- Обновлён визуал страницы (карточки, бейджи статусов, современный вид).

УСТАНОВКА
1. Плагины -> Добавить новый -> Загрузить плагин -> выбрать
   knitcat-import-export-v1.9.0.zip -> Установить -> Активировать.
2. Требуется активный WooCommerce и PHP 8.0 или новее.
3. Требуется активный плагин KnitCat Woo — именно он создаёт общее меню
   "KnitCat Plugins". Без него пункт "Импорт Экспорт" не появится в
   админке (это особенность архитектуры бренда, а не ошибка).
4. После активации зайдите на вкладку "Регистрация" и зарегистрируйте
   сайт (бесплатно) — без этого вкладки "Импорт" и "Экспорт" недоступны.
4. Пункт "Импорт Экспорт" появится в общем меню бренда "KnitCat Plugins".
   Ссылка "Настройки" также доступна прямо в списке "Плагины" рядом с
   "Активировать" / "Удалить".

ВАЖНО ПРИ ОБНОВЛЕНИИ С предыдущих версий (Price Import Tool / KnitCat Price
Import Tool, до v1.5.0)
Плагин переименован повторно (слаг сменился на knitcat-import-export),
поэтому WordPress снова увидит его как новый плагин. Перед установкой этой
версии деактивируйте и удалите предыдущую версию — иначе обе будут
числиться в списке плагинов одновременно.

КАК ПОЛЬЗОВАТЬСЯ — ИМПОРТ
1. Зайдите в "KnitCat Plugins -> Импорт Экспорт" (вкладка "Импорт").
2. Загрузите .xlsx от поставщика -> "Загрузить и выбрать листы".
3. Если в файле несколько листов, отметьте нужные. Выберите:
   - какую цену применять: МРЦ (обычная) или МРЦ для маркетплейсов;
   - округление цены: не округлять / до целого / до 5 ₽ / до 10 ₽;
   - способ округления (используется только если выбрано округление):
     математически (к ближайшему), в большую сторону, в меньшую сторону.
   Выбор округления запоминается и предлагается по умолчанию в следующий раз.
4. На экране проверки — таблица: артикул, наименование из прайса,
   наименование на сайте (кликабельная ссылка на страницу товара),
   текущая цена, новая цена (уже с учётом округления), статус:
   - "Увеличится ⬆️" / "Уменьшится ⬇️" — отмечены галочкой по умолчанию;
   - "не найден" — без чекбокса, применить нельзя;
   - "без изменений" — можно отметить вручную при желании.
5. Снимите/поставьте галочки как нужно, нажмите "Применить отмеченные изменения".
6. Обновляется "Обычная цена" (regular_price) у отмеченных товаров.
   Если у товара стоит цена со скидкой выше новой обычной — она сбрасывается,
   чтобы не осталась некорректной.

КАК ПОЛЬЗОВАТЬСЯ — ЭКСПОРТ
1. Вкладка "Экспорт". В поле поиска начните вводить название товара или
   артикул — ищутся только родительские товары. Можно выбрать несколько.
2. Переключателями выберите нужные колонки: ID, Название, Название +
   вариация, Вариация, Краткое описание, Артикул, Цена, Количество. Рядом
   с каждым переключателем — поле для своего названия заголовка колонки
   в итоговом файле (необязательно).
3. Задайте имя файла: текстовый префикс, и переключателями — добавлять ли
   дату и/или названия выбранных товаров.
4. "Экспортировать в XLSX" — файл скачается сразу. Для вариативных товаров
   будет отдельная строка на каждую вариацию (цвет/размер и т.п.).

ОГРАНИЧЕНИЯ / ЗАМЕЧАНИЯ
- Сопоставление при импорте идёт строго по точному совпадению SKU.
- Если один и тот же артикул встречается в файле дважды (в пределах
  выбранных листов), используется последнее значение.
- Файл читается и пишется собственным встроенным кодом для xlsx (без
  сторонних библиотек) — этого достаточно для задач такого рода.
- Загруженный при импорте файл хранится на сервере максимум 1 час (до шага
  проверки), после чего автоматически удаляется. Данные таблицы проверки —
  30 минут.
- При импорте обновляется только "Обычная цена". Закупочная цена и другие
  поля прайса не переносятся на сайт.
