AI генерация
Это руководство объясняет, как расставлять атрибуты ThemeForge на HTML-элементах, чтобы генератор создал WordPress тему с полноценной админ-панелью.
Вы можете поделиться этой страницей с любым AI-ассистентом (ChatGPT, Claude, Gemini и др.), чтобы он прочитал правила и правильно расставил атрибуты.
Отправьте ИИ-помощника по этому адресу — он прочитает правила расстановки из первоисточника, те самые, по которым генератор судит вашу разметку. Сначала отдаётся короткое оглавление, затем каждый модуль правил по запросу.
Варианты работы
Есть несколько способов использования атрибутов ThemeForge в зависимости от вашей отправной точки и инструментов.
1. AI генерирует сайт сразу с атрибутами
Для кого: пользователи с дизайном (Figma, макет, референс)
Поделитесь ссылкой на эту страницу с вашим AI-ассистентом вместе с дизайном. AI сгенерирует HTML с уже расставленными атрибутами. Вы проверяете отчёт, просите исправления и генерируете WordPress тему.
- Дайте AI ссылку на это руководство + ваш дизайн (ссылка Figma, скриншоты, референс)
- AI генерирует HTML со всеми атрибутами по правилам
- Проверьте отчёт по атрибутам — скорректируйте при необходимости
- Сгенерируйте WordPress тему через ThemeForge
2. AI расставляет атрибуты на готовый HTML
Для кого: разработчики с готовым HTML (экспорт из Webflow, шаблон, ручная вёрстка)
У вас уже есть HTML без атрибутов ThemeForge. Поделитесь этим руководством с AI и попросите проанализировать HTML и расставить атрибуты на нужные элементы. Затем проверьте и сгенерируйте.
- Дайте AI ссылку на это руководство + ваши HTML-файлы
- AI анализирует структуру и добавляет атрибуты на тексты, картинки, ссылки
- Проверьте отчёт — AI не всегда знает, какие элементы декоративные
- Запустите валидацию, исправьте проблемы, сгенерируйте тему
3. Ручная расстановка в Webflow Designer
Для кого: опытные пользователи Webflow, предпочитающие полный контроль
Добавляйте кастомные атрибуты прямо в Webflow Designer (Настройки элемента → Custom Attributes). Экспортируйте сайт и запустите валидацию перед генерацией темы.
- Выберите элемент в Webflow → Settings → Custom Attributes
- Добавьте имя атрибута (напр. fld-text) и значение (напр. Heading)
- Экспортируйте сайт (Code Export или .webflow.io)
- Запустите валидацию и сгенерируйте тему
Полный цикл
Независимо от метода, цикл проверки быстрый — не нужно импортировать в Webflow или ставить на WordPress только чтобы проверить атрибуты:
- Расставьте атрибуты (AI или вручную)
- Запустите отчёт — просмотрите дерево за секунды
- Не нравится? → скажите AI что исправить → снова отчёт
- Запустите валидацию — проверьте ошибки
- Сгенерируйте WordPress тему
Готовые промты для ИИ
Скопируйте промт и вставьте его в ваш ИИ-ассистент (ChatGPT, Claude, Gemini) вместе со ссылкой на этот гайд. ИИ автоматически будет следовать правилам расстановки атрибутов.
Промт А: Расставить атрибуты на готовый HTML
Используйте, когда у вас уже есть HTML-сайт и нужно добавить атрибуты ThemeForge.
У меня есть готовый HTML-сайт, который я хочу превратить в WordPress-тему с редактируемой админкой через ThemeForge.
Прочитай правила расстановки атрибутов и строго следуй им. Начни отсюда — по этой ссылке перечислены модули правил и сказано, что делать первым:
https://themeforge.pro/ai
Модуль `core` тяни всегда; если генерируешь сайт с нуля — тяни ещё `build`. Дальше добавь те, что нужны этому сайту (pages, blog, cpt, woocommerce, deploy).
Затем расставь атрибуты ThemeForge на весь редактируемый контент моего HTML:
- Каждая секция = пара таб + группа; короткие заголовки/подписи = текст, абзацы и длинные переносящиеся заголовки = textarea, картинки на тегах
, ссылки парой URL + текст.
- Повторяющиеся карточки (преимущества, команда, FAQ) = репитер с 2+ строками.
- Шапка, подвал, навигация, логотип и контакты = общие опции сайта.
- Если сайт мультиязычный — пометь переключатель языков как wp-menu="Language" и НЕ хардкодь видимый текст: каждая подпись должна быть полем (у каждого языка своё значение).
- Сохрани пути к картинкам/файлам как есть; не пропускай ни одного видимого текста.
[Добавь свои требования: какие страницы, поддержка WooCommerce / блога, языки и т.д.]
После расстановки выполни шаги «Финальной доставки»: создай страницу theme-options со ВСЕМИ полями-опциями, запусти файлы локально и дай мне полный список URL страниц для вставки в ThemeForge.
Промт Б: Сгенерировать HTML с атрибутами с нуля
Используйте, когда нужно, чтобы ИИ создал HTML-сайт по дизайну (Figma, скриншот, описание) с уже расставленными атрибутами ThemeForge.
Мне нужно, чтобы ты сгенерировал HTML-сайт с уже расставленными атрибутами ThemeForge, готовый для генерации WordPress-темы.
Прочитай правила расстановки атрибутов и строго следуй им. Начни отсюда — по этой ссылке перечислены модули правил и сказано, что делать первым:
https://themeforge.pro/ai
Модуль `core` тяни всегда; если генерируешь сайт с нуля — тяни ещё `build`. Дальше добавь те, что нужны этому сайту (pages, blog, cpt, woocommerce, deploy).
Вот мой дизайн: [ПРИКРЕПИ ССЫЛКУ НА FIGMA / СКРИНШОТЫ / ОПИСАНИЕ]
Сгенерируй чистый, семантический HTML + CSS и расставляй атрибуты ThemeForge на редактируемом контенте по мере сборки каждой секции (не отдельным проходом):
- Каждая секция = пара таб + группа; текст vs textarea по числу строк; картинки на
; ссылки парой URL + текст; повторяющиеся карточки = репитер с 2+ строками.
- Шапка/подвал/навигация/контакты = общие опции сайта.
- Для мультиязычного сайта — пометь переключатель языков как wp-menu="Language" и держи каждую видимую строку полем (без хардкода текста).
Используй реальный контент-заполнитель (не lorem ipsum), чтобы импорт заполнил реальные поля.
[Добавь свои требования: цвета, шрифты, количество страниц, WooCommerce / блог, языки и т.д.]
После генерации выполни шаги «Финальной доставки»: создай страницу theme-options со ВСЕМИ полями-опциями, запусти файлы локально и дай мне полный список URL страниц для вставки в ThemeForge.
Советы для лучших результатов
- Для Промта Б: прикрепите как можно больше визуального контекста — скриншоты, ссылки на Figma, референсные сайты. Чем больше контекста, тем лучше результат.
- Можно дополнить промты своими требованиями: цветовая схема, шрифты, конкретные секции, количество страниц, поддержка WooCommerce или блога, несколько языков и т.д.
- После завершения попросите ИИ развернуть сайт в локальной папке и запустить сервер — затем вставьте локальный URL в ThemeForge для генерации WordPress-темы.
- Ссылка на гайд уже включена в промт. ИИ прочитает полные правила расстановки атрибутов прямо со страницы.
- Многоязычный сайт? Размечайте контент как обычно — одно имя поля хранит все языки; подключите переключатель через wp-menu=«Language». См. раздел «Многоязычные сайты».
- Давайте каждому полю УНИКАЛЬНОЕ имя в его scope — никогда не переиспользуйте имя секции для репитера внутри неё, иначе ссылка и её картинка не выживут вместе.
Префиксы атрибутов
| Prefix | Scope | Description |
|---|---|---|
fld-* | Per-page | Поля страницы — контент уникальный для ОДНОЙ страницы (заголовок hero, картинки) |
opt-* | Site-wide | Глобальные настройки — контент общий для ВСЕХ страниц (телефон, email, логотип) |
tax-* | Taxonomy | Поля таксономий — контент на страницах категорий/тегов |
wp="..." | WP Core | Ядро WordPress — динамические данные WP (заголовок поста, дата, изображение) |
wp-fields-group="..." | Sections | Группировка секций — объединяет поля в секции админ-панели (метабоксы) |
Типы полей
| Attribute | Field | HTML Element | Example |
|---|---|---|---|
fld-text | Text | <h1>-<h6>, <p>, <div> | <h2 fld-text="Heading"> |
fld-area | Textarea | <p>, <div> | <p fld-area="Description"> |
fld-image | Image | <img> only | <img fld-image="Photo"> |
fld-bg-image | BG Image | Any element | <div fld-bg-image="BG"> |
fld-link | Link | <a> only | <a fld-link="Button"> |
fld-editor | Rich editor | <div> | <div fld-editor="Content"> |
fld-loop | Repeater | Wrapper <div> | <div fld-loop="Items"> |
fld-group | Group | Container | <div fld-group="Hero"> |
fld-layouts | Section builder | Wrapper <div> | <div fld-layouts="Page Sections"> |
fld-layout | Section type | Direct child | <section fld-layout="Hero"> |
layout-preview | Preview control | On fld-layout | layout-preview="off" |
fld-tab | Tab | Empty <div> | <div fld-tab="Hero" wp="delete-element"> |
fld-show | Toggle (show) | Wrapper <div> | <div fld-show="Show CTA"> |
fld-hide | Toggle (hide) | Wrapper <div> | <div fld-hide="Hide CTA"> |
fld-gallery | Gallery | Wrapper <div> | <div fld-gallery="Photos"> |
Replace fld- with opt- for site-wide options. Full reference: Справочник атрибутов
Правила расстановки
Секции и табы
fld-tab должен быть на отдельном пустом <div>, НЕ на том же элементе что fld-group. Размещайте его как соседний элемент ПЕРЕД группой.
<!-- ONE wp-fields-group per page on <body> -->
<body wp-fields-group="Home Page">
<!-- Tab = empty sibling BEFORE the group -->
<div fld-tab="Hero" wp="delete-element" class="tab-div"></div>
<section fld-group="Hero" class="hero">
<h1 fld-text="Heading">Welcome</h1>
<p fld-area="Description">...</p>
</section>
<div fld-tab="Features" wp="delete-element" class="tab-div"></div>
<section fld-group="Features" class="features">
...
</section>
</body>
Ссылки — всегда пара
Каждая ссылка ДОЛЖНА иметь и атрибут ссылки, и атрибут текста, под ДВУМЯ именами — fld-link="X" на <a>, fld-text="X text" на дочернем <div>. Одно имя на оба — одно поле питает и адрес, и подпись. Телефон/email: только opt-phone-link / opt-email-link — один атрибут заполняет и href, и видимый текст. Исключение: ссылки-иконки и декоративные ссылки без видимого текста.
<!-- CORRECT: fld-link on <a>, fld-text on child, two names -->
<a fld-link="CTA" href="/shop" class="btn w-inline-block">
<div fld-text="CTA text">Shop Now</div>
</a>
<!-- Phone/email: one attribute fills both href and text -->
<a opt-phone-link="Phone" href="tel:...">+1 234 567</a>
Изображения
fld-image ставится ТОЛЬКО на <img> теги. fld-bg-image — на любой элемент с фоновым изображением.
<img fld-image="Hero Image" src="images/hero.jpg" alt="Hero" />
<div fld-bg-image="Background" style="background-image:url('img/bg.jpg')"></div>
Репитеры (повторяемые блоки)
ВСЕ дочерние элементы внутри fld-loop ДОЛЖНЫ иметь ОДИНАКОВЫЕ атрибуты ThemeForge. Используйте разный текст и изображения в каждой строке.
<div fld-loop="Team" class="team-grid">
<div class="card">
<img fld-image="Photo" src="images/avatar-1.jpg" />
<h3 fld-text="Name">John Doe</h3>
</div>
<!-- Row 2: SAME attributes, DIFFERENT content -->
<div class="card">
<img fld-image="Photo" src="images/avatar-2.jpg" />
<h3 fld-text="Name">Jane Smith</h3>
</div>
</div>
Глобальные настройки сайта
Элементы на каждой странице (телефон, email, логотип, адрес) должны использовать opt-* вместо fld-*.
<!-- Header: site-wide, use opt-* -->
<img opt-image="Logo" src="images/logo.png" />
<!-- Navigation: a repeater of link + caption rows (NOT wp-menu) -->
<nav opt-loop="Nav links" class="nav">
<div class="nav-item">
<a opt-link="Link" href="/about" class="nav-link w-inline-block">
<div opt-text="Link text">About</div>
</a>
</div>
…
</nav>
<!-- Footer: contacts — one attribute each -->
<a opt-phone-link="Phone" href="tel:...">+1 234 567</a>
<a opt-email-link="Email" href="mailto:...">info@site.com</a>
<p opt-text="Address">123 Main St</p>
Меню
<!-- Navigation: an opt-loop of link + caption rows (preferred) -->
<nav opt-loop="Nav links" class="nav">
<div class="nav-item">
<a opt-link="Link" href="/" class="nav-link w-inline-block">
<div opt-text="Link text">Home</div>
</a>
</div>
<div class="nav-item">
<a opt-link="Link" href="/about" class="nav-link w-inline-block">
<div opt-text="Link text">About</div>
</a>
</div>
</nav>
<!-- Language switcher (Polylang): use wp-menu -->
<div wp-menu="Language" class="lang-switcher">
<a href="/en" class="lang-link">EN</a>
<a href="/ua" class="lang-link">UA</a>
</div>
Имена — каждое имя уникально
В одном scope каждое имя поля должно быть уникальным. ThemeForge ключует поля по имени, поэтому два разных поля с одинаковым именем конфликтуют — одно молча теряется.
- НИКОГДА не давайте репитеру (fld-loop) то же имя, что у секции или группы, внутри которой он находится — называйте репитер по его строкам (напр. «Карточки счётчиков»), а не как секцию («Счётчики»).
- Ссылка и её картинка или текст рядом должны иметь РАЗНЫЕ имена — напр. opt-link=«Ссылка логотипа» + opt-image=«Логотип», а не оба «Логотип».
- Одинаковое имя — только намеренно (строки репитера, переключатели show/hide). Конвертер сообщает о случайных конфликтах имён во вкладке «Логи» проекта.
<!-- WRONG: repeater reuses its section/group name -->
<section fld-group="Counters">
<div fld-loop="Counters"> ... </div>
</section>
<!-- RIGHT: distinct names -->
<section fld-group="Counters">
<div fld-loop="Counter cards"> ... </div>
</section>
Многоязычные сайты (Polylang / WPML)
Если у источника два и более языка (переключатель, коды локалей вроде ua/ru/en или страницы, продублированные по языкам) — сайт многоязычный. ThemeForge сам определяет Polylang или WPML — разметка одинакова. От одноязычного сайта отличаются лишь две вещи:
- Переключатель языка использует wp-menu=«Language» — плагин языков сам подставляет ссылки локалей.
- Каждое контентное поле хранит значение НА КАЖДЫЙ язык. Используйте ОДНО имя поля (напр. fld-text=«Заголовок») — НЕ создавайте «Заголовок EN» / «Заголовок RU». Владелец редактирует каждый язык в админке, а импортёр заполняет все локали.
Переключатель языка — рецепт
<!-- Dropdown: toggle shows the CURRENT language (an options field),
the list is a connected wp-menu="Language" (locales injected) -->
<div opt-hide="Hide language switcher" class="lang-drop w-dropdown">
<div class="lang-dt w-dropdown-toggle">
<div opt-text="Current language">UA</div>
</div>
<nav class="lang-drop-list w-dropdown-list">
<div wp-menu="Language" class="lang-switcher">
<a href="/en"><div>ENG</div></a>
<a href="/ru"><div>РУС</div></a>
</div>
</nav>
</div>
<!-- Simple variant: a flat list of language links -->
<ul wp-menu="Language" class="header__languages">
<li><a href="/">UA</a></li>
<li><a href="/ru/">RU</a></li>
<li><a href="/en/">EN</a></li>
</ul>
Глобальные поля opt-* (телефон, адрес, подписи навигации) тоже хранятся по языкам, поэтому шапка/подвал каждой локали могут отличаться. Размечайте их opt-* как обычно — никакой доп. работы.
На многоязычном сайте НЕ:
- хардкодьте видимый текст — он станет непереводимым; всё становится полем;
- создавайте по одному полю на язык — одно имя, CMS хранит его по локалям;
- размечайте ссылки внутри wp-menu=«Language» — плагин заменяет их собственными ссылками локалей.
Подсказка по детекту: переключатель языка в шапке/подвале (флаги или коды ua/ru/en) либо префиксы URL /ru/… и /en/… означают, что сайт многоязычный — подключите переключатель через wp-menu=«Language» и ожидайте контент по локалям. Одноязычному сайту это не нужно.
Что НЕ нужно маркировать
- Декоративные элементы: разделители, спейсеры, оверлеи, SVG-иконки
- Структурные обёртки: grid-контейнеры, flex-обёртки, каркас вёрстки
- Ссылки навигации внутри wp-menu (WordPress управляет ими)
- Статические UI-подписи: «Цена:», «Количество:», заголовки таблиц
- UI-иконки: поиск, корзина, шевроны, стрелки
- Стандартный текст футера: «Все права защищены», год копирайта
Правило: если владелец сайта захочет изменить этот текст/картинку из админки — ставьте атрибут. Если это UI-хром — пропускайте.
Чеклист
- Каждая секция wp-fields-group имеет уникальное, понятное название
- Все дочерние элементы репитера имеют одинаковые атрибуты с разным контентом
- Изображения используют теги <img> где возможно
- Каждая ссылка имеет ОБА атрибута: ссылки + текста (fld-link + fld-text, opt-phone-link + opt-text и т.д.)
- Контакты в футере используют opt-* (опции), не fld-*
- Табы — пустые сиблинги с wp="delete-element"
- Нет атрибутов на декоративных/структурных элементах
- Названия полей — понятные, на английском
Обязательные страницы и слаги
Имя файла (слаг) определяет, какой WordPress-шаблон будет сгенерирован. Некоторые страницы обязательны, другие зависят от типа сайта (блог, магазин).
theme-options.html — ОБЯЗАТЕЛЬНО
Эту страницу НУЖНО создать обязательно. Она содержит ВСЕ opt-* поля сайта (логотип, навигация, телефон, email, адрес, соцсети, копирайт). Добавьте wp-fields-group="Theme Options" на <body> и организуйте поля через opt-tab. Без этой страницы поля опций НЕ появятся в админке WordPress.
<!-- theme-options.html -->
<body wp-fields-group="Theme Options">
<div opt-tab="Header" wp="delete-element" class="tab-div"></div>
<img opt-image="Logo" src="images/logo.png" />
<nav opt-loop="Nav links" class="nav">
<div class="nav-item">
<a opt-link="Link" href="/about" class="nav-link w-inline-block">
<div opt-text="Link text">About</div>
</a>
</div>
<div class="nav-item">
<a opt-link="Link" href="/contacts" class="nav-link w-inline-block">
<div opt-text="Link text">Contacts</div>
</a>
</div>
</nav>
<div opt-tab="Footer" wp="delete-element" class="tab-div"></div>
<a opt-phone-link="Phone" href="tel:...">+1 234 567</a>
<a opt-email-link="Email" href="mailto:...">info@site.com</a>
<p opt-text="Address">123 Main St</p>
<div opt-text="Copyright">© Company</div>
</body>
Слаг → Шаблон
Используйте эти точные имена файлов. Кастомные страницы (about, services, contacts и т.д.) могут использовать любой слаг, не совпадающий с зарезервированными ниже.
| File name | WP template | When to use |
|---|---|---|
index.html | index.php | Главная (обязательно) |
about.html | about.php | Кастомная страница — любой слаг |
single.html | single.php | Одиночный пост блога |
archive.html | archive.php | Список постов блога |
404.html | 404.php | Страница не найдена |
search-page.html | search.php | Результаты поиска |
single-product.html | single-product.php | Страница товара (WooCommerce) |
archive-product.html | archive-product.php | Каталог товаров (WooCommerce) |
taxonomy-product-cat.html | taxonomy-product-cat.php | Архив категории товаров (WooCommerce) |
page-cart.html | page-cart.php | Корзина (WooCommerce) |
page-checkout.html | page-checkout.php | Оформление заказа (WooCommerce) |
page-wishlist.html | page-wishlist.php | Список желаний (WooCommerce) |
page-my-account.html | page-my-account.php | Личный кабинет (WooCommerce) |
single-{type}.html | single-{type}.php | Произвольный тип записи — одиночная / архив |
theme-options.html | — | Глобальные опции (только админка, без шаблона) |
Финальная доставка — НЕ пропускать
После генерации всех страниц с атрибутами вы ОБЯЗАНЫ выполнить эти шаги:
- Создайте theme-options.html со ВСЕМИ opt-* полями (см. выше)
- Сохраните все HTML-файлы в одну папку. Сообщите пользователю имя папки
- Дайте пользователю полный список ВСЕХ слагов страниц (имена файлов без .html), готовых для вставки в поле страниц генератора ThemeForge:
- В ThemeForge создайте проект, поставьте галочку «Исходник будет загружен на сайте», вставьте список страниц и скачайте бланковую тему. Установите её в WordPress, загрузите ZIP-архив сайта в разделе «ThemeForge → Исходник» (отдельный пункт меню админки) и нажмите «Обновить тему из проекта».
index, about, services, contacts, theme-options
tf-cors.php
Необязательно: если сайт уже отдаётся по localhost-адресу, можно указать в проекте этот адрес вместо загрузки архива на сайте (см. «Исходник на сайте»). Создайте этот файл в корне сайта и запустите сервер командой: php -S localhost:8080 tf-cors.php. Разрешён только themeforge.pro — никакой другой сайт к вашим файлам доступа не получит.
<?php
// ThemeForge CORS Router — place in site root, run: php -S localhost:8080 tf-cors.php
$allowed = ['https://themeforge.pro', 'https://www.themeforge.pro', 'http://localhost:8081'];
$origin = $_SERVER['HTTP_ORIGIN'] ?? '';
if (in_array($origin, $allowed, true)) header('Access-Control-Allow-Origin: ' . $origin);
elseif (empty($origin)) header('Access-Control-Allow-Origin: https://themeforge.pro');
header('Access-Control-Allow-Methods: GET, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type');
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') { http_response_code(204); exit; }
$path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$file = __DIR__ . $path;
if (is_dir($file)) $file = rtrim($file, '/') . '/index.html';
if (!is_file($file) && is_file($file . '.html')) $file .= '.html';
if (is_file($file)) {
$ext = strtolower(pathinfo($file, PATHINFO_EXTENSION));
$types = ['html'=>'text/html','css'=>'text/css','js'=>'application/javascript','json'=>'application/json',
'png'=>'image/png','jpg'=>'image/jpeg','jpeg'=>'image/jpeg','gif'=>'image/gif','svg'=>'image/svg+xml',
'webp'=>'image/webp','ico'=>'image/x-icon','woff'=>'font/woff','woff2'=>'font/woff2','ttf'=>'font/ttf'];
if (isset($types[$ext])) header('Content-Type: ' . $types[$ext]);
readfile($file); return true;
}
http_response_code(404); echo '404 Not Found';
Шпаргалка
PAGE: <body wp-fields-group="Page Name"> (ONE per page)
TAB: <div fld-tab="Section" wp="delete-element" class="tab-div"></div>
GROUP: <section fld-group="Section"> (ALWAYS after each tab)
TEXT: <h2 fld-text="Heading">...</h2>
TEXTAREA: <p fld-area="Description">...</p>
IMAGE: <img fld-image="Photo" src="..." />
BG IMAGE: <div fld-bg-image="BG" style="background-image:url(...)">
LINK+TEXT: <a fld-link="Btn"><div fld-text="Btn text">Click</div></a>
REPEATER: <div fld-loop="Items"> (all children = same attrs)
BUILDER: <div fld-layouts="Page Sections"><section fld-layout="Hero">
(client picks section types; previews are automatic)
optional: layout-preview="off" | layout-preview="images/x.jpg"
TOGGLE: <div fld-show="Show X"> or <div fld-hide="Hide X">
NAV LINKS: <nav opt-loop="Nav links"><div><a opt-link="Link"><div opt-text="Link text">...</div></a></div>…</nav>
OPTIONS: opt-text, opt-image, opt-link, opt-phone-link, opt-email-link
LANG SWITCH: <div wp-menu="Language"> (Polylang only)
POST LOOP: <div wp-query="'post_type'=>'post','posts_per_page'=>3">
PRODUCTS: <div wp-product-query="'post_type'=>'product','posts_per_page'=>4">
CONDITION: <div wp-if="on_sale">
Проверка разметки
Прежде чем отдавать сайт, отправьте все его страницы в бесплатную проверку. Она запускает настоящий парсер генератора — без аккаунта, ничего не сохраняется — и перечисляет, к чему придерётся генератор: error ломает тему, warning — что-то молча выпадает, hint — стоит знать. Повторяйте, пока ответ не скажет "ok": true.
POST /api/validate-markup
Отправляйте весь набор одним запросом: часть проверок касается набора, а не одного файла — есть ли theme-options.html, есть ли главная.
POST https://themeforge.pro/api/validate-markup
Content-Type: application/json
{"pages":[
{"name":"index.html","html":"<!doctype html>…"},
{"name":"about.html","html":"…"},
{"name":"theme-options.html","html":"…"}
]}
Продвинутое — ИИ-агент + Webflow MCP
Два промта выше работают с любым ИИ по готовой HTML-странице. Если вы собираете в Webflow, те же атрибуты можно расставить прямо в Designer ИИ-агентом (напр. Claude Code) с подключённым Webflow MCP — те же правила, без копипаста.
- Один канон: правила размещения на этой странице — единый источник истины для обоих маршрутов.
- В любом случае результат — набор размеченных страниц, который вы отдаёте генератору ThemeForge (опубликованный URL *.webflow.io или локальная папка HTML).