VD72 — миграция и редизайн главной интернет-магазина стройматериалов «Ваш дом» (v-d72.ru)
Региональный интернет-магазин стройматериалов / DIY (РФ) · E-commerce, розничная торговля стройматериалами (DIY)
Главная интернет-магазина стройматериалов была собрана в устаревшем визуальном конструкторе. Пересобрал её так, чтобы содержимое правилось из админки.
- 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.phpPorto — всё в 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 и более специфичные селекторы.
Услуги в проекте
- миграция
- разработка
- доработка существующего
- аудит
- деплой
- контент