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

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

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

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

  • 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-миграции (оценка, не факт)

Контекст и задача

v-d72.ru — действующий интернет-магазин стройматериалов «Ваш дом» (с. Исетское / Исетский район, РФ) на WordPress 6.8.3 / PHP 8.3, тема Porto (premium classic) + porto-child, WooCommerce 10.1.3. Сайт нагружен бизнес-критичными интеграциями: синхронизация с 1С (wc1c, 6 модулей), DaData, YITH Wishlist, AJAX-поиск, фильтры WooCommerce. Старая главная собрана на WPBakery Visual Composer (v8.5) и плохо поддерживается. Задача — пересобрать главную страницу по готовому HTML-макету, сделав её редактируемой из админки, и при этом не задеть production и 1С. Работа выполнялась как независимый проект (2026), вне штатной занятости.

Что я сделал

  • Реконструировал контент старой главной из дампов WPBakery (wpbakery-content*.txt, 4 версии: vc_row / porto_ultimate_content_box / porto_products / vc_tta_accordion и т.п.) и перенёс его в новую структуру.
  • Разработал кастомный шаблон страницы template-vd72-homepage.php для porto-child и ~12 template-parts по секциям (topbar, header/hero, categories, catalog, seasonal, services, about, cooperation, faq, gallery, footer).
  • Реализовал контент-модель на ACF Free (69 полей, экспорт в JSON) и 5 кастомных CPT (vd72_service, vd72_stat, vd72_benefit, vd72_faq, vd72_usp) — сознательно без ACF Pro.
  • Написал ~2100 строк CSS и ~234 строки JS (Swiper, аккордеон, контролы количества) под макет; интегрировал каталог распродаж через wc_get_products([. 'on_sale' => true]) с возможностью ручного выбора товаров через ACF.
  • Подготовил два миграционных документа-промпта (Classic Editor + ACF и Gutenberg) под Claude Opus 4.5, архитектурный план гибридной миграции на Gutenberg и сравнительный аудит ACF-альтернатив.
  • Настроил AI-инструментарий проекта (OpenCode, WordPress-скиллы, MCP к живому сайту) и оформил документацию по Diátaxis.

Честно о роли: это миграция + доработка существующего коммерческого сайта, а не greenfield. Новая главная — нетривиальный net-new код внутри уже работающего сайта; одновременно это перенос контента (WPBakery → ACF/PHP, далее планово → Gutenberg) и набор задач доработки. Запланированная Gutenberg-фаза (theme.json, block patterns, блоки на Interactivity API) на момент анализа задокументирована, но в коде темы не реализована.

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

Ключевое инженерное решение — полная изоляция новой главной от 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С».

Результат

  • Собран и развёрнут на тестовой странице (/glavnaya-chernovik/, Page ID 286584, статус draft/private) изолированный кастомный шаблон главной: ~5300 строк кода темы, 69 ACF-полей, ~10 секций с динамикой из WooCommerce/ACF (источник: porto-child/*, media-mapping.md).
  • Подготовлен полный пакет проектной документации: план доработок (10 задач), архитектурный план Gutenberg-миграции, аудит ACF-альтернатив, how-to по конвертации и настройке AI-окружения.
  • Бизнес-метрики эффекта (производительность, Lighthouse, конверсия) не зафиксированы (уточнить у автора); факт вывода в production и завершённость доработок также не подтверждены.

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

  • 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С.

Роль ИИ в проекте

Проект — выраженный пример AI-augmented разработки на стеке OpenCode (а не Claude Code):

  • opencode.json подключает WordPress MCP (@automattic/mcp-wordpress-remote → endpoint …/wp-json/mcp/mcp-adapter-default-server); на сайте активны abilities-api (v0.5.0) и mcp-adapter (v0.4.1) — MCP использовался для анализа живого сайта (тема, плагины, версии, CPT) и наполнен в .opencode/context/wordpress-site-analysis.md и media-mapping.md.
  • .opencode/skills/ — 9 скиллов: 8 из Automattic Agent Skills (wp-project-triage, wp-block-development, wp-block-themes, wp-plugin-development, wpds, wp-interactivity-api, wp-wpcli-and-ops, wordpress-router) + кастомный wp-html-to-porto (адаптация HTML-вёрстки под Porto), оформленный по спецификации skills.
  • Среда: OpenCode CLI + Oh My OpenCode (@opencode-ai/plugin), процесс — research → plan → implement.
  • Doc-driven / промпт-инжиниринг: подробные миграционные промпты (GUTENBERG_MIGRATION_PROMPT.md, CLASSIC_EDITOR_ACF_MIGRATION_PROMPT.md) написаны под Claude Opus 4.5; документация по системе Diátaxis (docs/).
  • Конкретные артефакты: opencode.json, .opencode/context/*, .opencode/skills/wp-html-to-porto/SKILL.md, docs/how-to/setup-wordpress-skills.md.

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

  • Не сломать 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 и более специфичные селекторы.
  • миграция
  • разработка
  • доработка legacy
  • аудит
  • деплой
  • контент