Настройка синхронизации WooCommerce с МойСклад: аддоны для плагина WooMS

Александр Шулепов
Александр Шулепов
CEO КодАвтоматизации
Содержание

Для настройки синхронизации WooCommerce с МойСклад мы взяли готовый плагин WooMS (автор WPCraft). В процессе работы с расширением выяснилось, что оно существенно устарело и синхронизирует не все данные. Автор не дорабатывает его, поскольку плагин распространяется по принципу «как есть». Чтобы не создавать синхронизацию с нуля, мы решили дополнить функционал модуля отдельными плагинами-аддонами. 

Импорт краткого описания и добавление произвольных полей из МойСклад в WordPress

Сначала мы создали мини-плагин для импорта произвольного поля из МойСклад в краткое описание товаров WooCommerce. При активации он добавляет в настройки основного расширения WooMS дополнительные опции:



Настройки аддона для импорта краткого описания: выбор дополнительного поля из МойСклад и активация опции

Плагин получает из МойСклад все дополнительные (кастомные) поля. В настройках достаточно выбрать нужное поле и отметить чекбокс – при ближайшей синхронизации данные этого поля автоматически попадут в краткое описание товаров.

Синхронизация изображений и запасов с обработкой ошибок

В процессе применения основного плагина мы обнаружили, что он некорректно обрабатывает сбои соединения с МойСклад: при ошибке не запускается повторная синхронизация изображений для уже загруженных товаров. Кроме того, при обрывах связи переставало обновляться наличие на складе. В связи с этим мы дополнили функционал ещё одним мини-плагином.

Для синхронизации изображений мы добавили отдельную кнопку «Синхронизировать». При её нажатии сайт подключается к МойСклад и принудительно обновляет все картинки товаров.

Кэширование данных и обход лимитов API МойСклад

На стороне МойСклад действуют ограничения на работу с API (частота соединений и число одновременных запросов). Чтобы не превышать эти лимиты, мы реализовали механизм кэширования минимальных данных о товарах и категориях. При нажатии на кнопку «Копия» в настройках аддона сайт подключается к МойСклад, получает список позиций и рубрик и сохраняет минимальный набор данных в JSON-файлы: для товаров – id, title, slug, price, stock, category; для категорий – id, title, slug. Далее большинство операций работает с локальной копией, что позволяет снизить нагрузку на API.

Управление категориями товаров

Категории товаров – в этом блоке, если не отмечен чекбокс «Записать в базу», выполняется симуляция привязки категорий (выводится таблица с разделами без фактического изменения данных). Такой режим понадобился, когда заказчик временно убирал часть номенклатуры в архив на стороне МойСклад, а затем возвращал – основной плагин не восстанавливал категории, товары оставались без рубрики и получали статус «нет в наличии». При отметке чекбокса происходит реальная запись обновлённых данных в базу.

Названия категорий – со временем часть объединённых категорий переименовывается в отдельные, появляются новые разделы. Основной плагин не обновляет сами категории, поэтому мы добавили такую возможность. Здесь также действует симуляция (без отметки выводится таблица с изменениями), а при активации чекбокса данные записываются в базу.



Интерфейс управления категориями: таблица с существующими разделами и чекбокс для записи изменений в базу данных

Импорт новых товаров из МойСклад

Импорт новых позиций – этот блок отвечает за добавление на сайт товаров, которые появились в МойСклад, но по какой‑то причине не были синхронизированы основным плагином. Поскольку аддон в основном работает с локальной копией, содержащей лишь несколько полей, импорт получается неполным. Если чекбокс не отмечен, происходит симуляция: перебираются все позиции (шаг – 120 товаров) и новые добавляются с ограниченной информацией. На практике этот функционал не пригодился – основной плагин всегда успевал синхронизировать новые товары, поэтому блок пока остаётся в недоработанном виде на случай возможных будущих версий.



Индикатор процесса синхронизации: отображается текущий прогресс (количество обработанных товаров и общее число позиций)

Обновление цен, запасов и удаление товаров

Обновление данных – здесь запускается принудительная синхронизация остатков и цен, а также удаление несуществующих в МойСклад позиций (например, если владелец аккаунта удалил товар, его следует убрать и с сайта). Если чекбоксы не отмечены, работает симуляция: выводится таблица, в которой красным выделены расхождения по наличию или цене.

Товары без категории – при снятом чекбоксе просто отображается таблица с позициями, у которых нет рубрики. При активации создаётся Excel-файл на сервере, содержащий только такие товары – его можно передать владельцу аккаунта МойСклад для анализа и исправления.

Кроме того, мы реализовали функционал для автоматического запуска обновлений по расписанию.


Панель инструментов Wooms: сводка по товарам и раздел для создания локальной копии данных

В настройках можно задать время выполнения задачи и отслеживать её статус. Отсюда же доступен ручной запуск при необходимости.

 

Комментарии
Оставить комментарий
    1. Горе Интегратор

      Раздел про товары без категории немного непонятен. Написано, что создается Excel-файл на сервере - его надо вручную скачивать через FTP или он как-то доступен из админки?

      1. Александр Шулепов
        ответ на комментарий
        Горе Интегратор

        Из админки - там же появляется ссылка для скачивания после генерации. FTP не нужен.

    2. Alex_W

      Вопрос по wordpress: аддоны распространяются как отдельные плагины, то есть их нужно устанавливать через стандартную панель или они подключаются как-то иначе?

      1. Александр Шулепов
        ответ на комментарий
        Alex_W

        Устанавливаются как обычные плагины вордпресс: загружаете zip-архив через «Плагины - Добавить новый - Загрузить плагин» и активируете. После активации в настройках WooMS появляются дополнительные разделы.

    3. n_frontend

      Интересно, что блок импорта новых товаров так и остался недоработанным. Это довольно честно написано, не часто такое встретишь в подобных статьях.

    4. Кирилл

      А симуляция перед реальной записью данных - это прямо удобно. Сколько раз обжигался на том, что плагин молча переписывал категории без возможности проверить, что изменится. Тут хотя бы можно посмотреть таблицу сначала.

      1. Александр Шулепов
        ответ на комментарий
        Кирилл

        Именно для этого и сделали. Особенно важно было для ситуации с возвратом номенклатуры из архива - заказчику нужно было видеть, что произойдет, прежде чем подтверждать изменения.

    5. sergei-dev

      Сохранил. Давно искал внятное описание того, как обходить лимиты API МойСклад, не изобретая велосипед с нуля.

    6. web_integrator

      Расписание запуска обновлений реализовано через стандартный WP-Cron или через системный cron сервера? Для нагруженных магазинов WP-Cron не всегда надежен.

      1. Александр Шулепов
        ответ на комментарий
        web_integrator

        Через WP-Cron. Для большинства проектов этого достаточно, но если магазин крупный и трафик нестабильный, системный cron надежнее. В этом случае стандартный WP-Cron отключается в wp-config.php и задача вешается напрямую через crontab.

    7. Михаил

      Полезная статья. Возник вопрос по кешированию: JSON-файлы с локальной копией данных хранятся прямо в папке плагина на сервере или куда-то отдельно пишутся?

      1. Александр Шулепов
        ответ на комментарий
        Михаил

        Пишутся в отдельную папку внутри директории плагина. Туда же попадают файлы для товаров и категорий. При необходимости путь можно изменить под структуру конкретного проекта.

    8. Nika

      За таблицу расхождений по ценам и остаткам отдельное спасибо. Всегда не хватало такого инструмента перед тем, как подтверждать массовое обновление данных в магазине.

    9. Pavel_K

      Как раз сейчас разбираюсь с WooCommerce и МойСклад на проекте заказчика. WooMS пробовал, но не понимал, почему картинки не подтягиваются после обрыва соединения. Оказывается, это не у меня руки кривые, а плагин так работает😅

      1. Александр Шулепов
        ответ на комментарий
        Pavel_K

        Да, это одна из самых частых жалоб на WooMS. Плагин при ошибке просто останавливается и не пытается повторить синхронизацию. Именно поэтому мы и сделали отдельную кнопку принудительного обновления картинок.

Form comments
Еще больше о нас и нашей деятельности
Послушать подкасты в аудиоформате: Wave, Podcasts.apple, Яндекс, Звук

Ещё больше крутых статей — в нашем Telegram-канале. Подписывайтесь, чтобы быть в курсе всех событий!