Перейти к содержимому
Эльдар Шахвалиев
Обсудить проект
← Все проекты
202601.2026 — наст. времяВ работемиграциядостоверность: medium

VD72 — миграция и редизайн главной интернет-магазина стройматериалов «Ваш дом» (v-d72.ru)

Региональный интернет-магазин стройматериалов / DIY (РФ) · E-commerce, розничная торговля стройматериалами (DIY)

WordPress fullstack-разработчик: миграция и редизайн главной страницы (backend PHP, WooCommerce, ACF, CPT, адаптивная вёрстка)

Главная интернет-магазина стройматериалов была собрана в устаревшем визуальном конструкторе. Пересобрал её так, чтобы содержимое правилось из админки.

  • PHP
  • JavaScript
  • HTML
  • CSS/SCSS
  • WordPress
  • Porto (child-тема)
  • WooCommerce
  • ACF (ACF Free)
  • CPT
  • WPBakery (источник)
  • Gutenberg (план)
  • Swiper
  • адаптивная вёрстка
  • 1С/wc1c (контекст сайта)

Ссылки и доступ — по запросу.

~5300
строк кода кастомной темы (porto-child): 2100 CSS, 771 ACF-регистрация, 657 JSON-экспорт ACF, 234 JS, 12 template-parts
69
ACF-полей в группе «VD72 Настройки главной страницы»
5
кастомных CPT (vd72_service, vd72_stat, vd72_benefit, vd72_faq, vd72_usp) — позже планировались к переводу в ACF
~10
секций главной (hero, категории, каталог, услуги, о нас, B2B, FAQ, галерея, футер)
9
WordPress-скиллов в .opencode/skills (8 Automattic + кастомный wp-html-to-porto)
15 000+
товаров в каталоге сайта (контекст окружения, не результат автора)
5–8 дней
плановая оценка MVP гибридной Gutenberg-миграции (оценка, не факт)
  • Магазин завязан на обмен с 1С: ошибка на главной обрушила бы не витрину, а товарооборот. Новая страница полностью изолирована, откат — переключением шаблона.
  • Около 69 полей закрывают содержимое всех секций — от первого экрана до блока для оптовых клиентов.
  • Собрал десять секций с живыми данными: категории, распродажа из каталога, услуги, вопросы и ответы, галерея, оптовый блок.
  • Обошёлся бесплатной версией расширения полей вместо платной: сравнил пять альтернатив по матрице критериев и обосновал выбор.
  • План перехода на блочный редактор подготовлен отдельным документом — с расчётом рисков для обмена с 1С, до написания кода.

Задача

Интернет-магазин стройматериалов с каталогом на 15 000 товаров. Главная страница была собрана в устаревшем визуальном конструкторе и почти не поддерживалась: поменять блок означало воевать с редактором, а не редактировать.

Сложность была в цене ошибки. Магазин завязан на обмен с 1С, поиск по каталогу и фильтры — сбой на главной обрушил бы не витрину, а товарооборот. Требовалось пересобрать главную по готовому макету, сделать её редактируемой из админки и при этом не задеть ничего из работающего.

Что сделано

  • Пересобрал главную из выгрузки старого конструктора в обычный шаблон темы: каждая секция — отдельный кусок кода, содержимое приходит из полей админки, а не из разметки, вшитой в страницу.
  • Изолировал новое от старого полностью. Стили и скрипты грузятся только на этой странице, все имена полей и типов записей несут собственную приставку, родительская тема не тронута — откат сводится к переключению шаблона.
  • Собрал десять секций с живыми данными: категории, распродажа прямо из каталога, услуги, вопросы и ответы, галерея, блок для оптовых клиентов.
  • Обошёлся бесплатной версией расширения полей вместо платной: сравнил пять альтернатив по матрице критериев и обосновал выбор письменно, а не на вкус.
  • Подготовил план перехода на блочный редактор — с расчётом рисков для обмена с 1С и порядком отката, отдельным документом до написания кода.

Итог

Было

  • Главная собрана в устаревшем визуальном конструкторе и почти не поддерживается
  • Правка страницы рискует задеть живой магазин и обмен с 1С
  • Содержимое вперемешку с вёрсткой: текст не отделить от разметки

Стало

  • Отдельный шаблон, изолированный от остального сайта: родительская тема и обмен с 1С не затронуты
  • Содержимое главной редактируется из админки, по полям
  • Откат — переключением шаблона, одной операцией

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

Новая страница изолирована от остального магазина: её стили и скрипты грузятся только на ней, а откат — это переключение шаблона. Обмен с 1С и каталог на 15 000 товаров работой не затронуты.

Проект продолжается: план перехода на блочный редактор подготовлен и оценён, реализация впереди.

Технические детали

Решение и подход

Ключевое инженерное решение — полная изоляция новой главной от production, чтобы не сломать Porto/WooCommerce/1С:

  • условная загрузка ассетов только на странице с этим шаблоном;
  • префикс vd72_ для всех CPT/полей/классов во избежание коллизий;
  • ACF-группы привязаны строго к шаблону template-vd72-homepage.php;
  • никаких правок родительской темы и functions.php Porto — всё в porto-child;
  • простой rollback (снять шаблон/CPT — изменения откатываются).

Шаблон сознательно не использует header/footer Porto, чтобы избежать дублирования. Видимость секций управляется флагами ACF (vd72_show_*). Каталог: если в ACF выбраны товары — берутся они, иначе fallback на случайные товары со скидкой. Для будущего Gutenberg выбран гибридный вариант (Porto Child + Gutenberg + theme.json) против полного Block Theme — обоснование: неприемлемый риск для 1С-интеграции и WooCommerce-кастомизаций Porto; решение задокументировано с матрицей рисков, rollback-планом и «протоколом безопасности 1С».

Стек и обоснование

  • WordPress + Porto (child) + WooCommerce — заданы существующим сайтом; работа строго в дочерней теме.
  • ACF Free + CPT (без ACF Pro) — осознанное ограничение по лицензии: повторяющийся контент вынесен в CPT, т.к. Repeater/Flexible Content недоступны во Free; параллельно изучены SCF/Carbon Fields/CMB2/Meta Box/Pods на случай смены подхода.
  • Нативные PHP-шаблоны + Swiper + ванильный JS — предсказуемость, отсутствие зависимости от jQuery/Porto JS, изоляция.
  • Gutenberg/theme.json/Interactivity API — выбран гибридный путь (план) ради совместимости с Porto и 1С.

Инженерные вызовы

  • Не сломать 1С/WooCommerce/Porto на живом магазине → стратегия изоляции + rollback + «протокол безопасности 1С» (логирование wc1c, staging, контрольная синхронизация).
  • Ограничение ACF Free (нет Repeater/Flexible/Gallery/Options) → контент-модель на CPT + Group-поля; отдельный аудит альтернатив с весовой матрицей.
  • Соответствие пиксель-в-пиксель макету при множестве breakpoints и переносе на динамику WooCommerce/ACF.
  • Выбор пути модернизации (гибрид Gutenberg vs полный Block Theme) с учётом несовместимости FSE и Porto/1С.
  • Конфликты стилей Porto/AWS-поиск и зависимость от jQuery — изоляция в module scope и более специфичные селекторы.
  • миграция
  • разработка
  • доработка существующего
  • аудит
  • деплой
  • контент