• Docs
        • Документация OnPress v2
            • Документация OnPress v2
              • Как устроена платформа
              • Быстрый старт
              • Доступ, роли и выбор сайта
                • Страницы
                  • Frontmatter: все поля
                  • Синтаксис markdown
                  • Языки и переводы страниц
                • Фреймы
                  • Вставки onpress/
                  • Бинды data-op-bind
                  • Сборка страницы и статическая копия
                • Готовые фреймы
                  • Фрейм assistant: страница с чатом ассистента
                  • Фрейм outline: оглавление в тексте
                  • Фрейм faq: вопросы из текста страницы
                  • Фрейм article: статья
                  • Фрейм docs: документация
                  • Фрейм site__header: шапка сайта
                  • Фрейм site__footer: подвал сайта
                  • Фрейм article__faq: вопросы из набора
                  • Фрейм landing: лендинг ассистента
                  • Фрейм assistant__chat: чат обычной разметкой
                  • Фрейм site__404: страница «не найдено»
                  • Фрейм news: лента новостей
                  • Фрейм news__category: рубрика новостей
                  • Фрейм news__post: новость
                  • Фрейм news__more: читайте ещё
                  • Фрейм news__share: поделиться
                  • Фрейм author__page: страница автора
                  • Фрейм author__byline: подпись автора
                  • Фрейм author__card: карточка автора
                  • Фрейм author__avatar: аватар автора
                  • Фрейм author__socials: соцсети автора
                  • Фрейм author__head: объявление набора автора
                  • Фрейм home: главная-документ
                  • Фрейм pricing: тарифы
                • Наборы данных и системные источники
                  • Повторитель onpress/repeat
              • Стили и оформление
              • Меню
              • Сайдбар документации
              • Языки сайта
              • Настройки, главная и кэш
              • SEO
              • Медиа
              • Сайты и домены
              • Пользователи и профиль
              • Дашборд и вход
                • Рецепты
                  • Сайт с нуля
                  • Раздел документации
                  • Лендинг из конструктора
                  • FAQ на странице
                  • Свой фрейм из готового
                  • Многоязычный сайт
                  • Поменять меню
                  • Перенести страницу
                  • Картинки в статье
                  • Список из данных
                  • Сменить оформление
                • Справочник API
                  • Справочник: страницы
                  • Справочник: переводы
                  • Справочник: фреймы
                  • Справочник: данные
                  • Справочник: меню
                  • Справочник: сайдбар документации
                  • Справочник: стили
                  • Справочник: настройки, главная, кэш
                  • Справочник: языки
                  • Справочник: SEO
                  • Справочник: медиа
                  • Справочник: сайты
                  • Справочник: пользователи и профиль
                  • Справочник: вход и служебное
                • Ошибки и частые проблемы
                  • Коды ошибок
        • Старая документация v1
            • Старая документация v1
              • Начало
              • Привязка домена
              • Виджеты
              • Структура ссылок
              • Connector.js
              • Шапка
              • Подвал
              • Мультиязычность
              • Меню
              • Как настроить стили сайта через Design
              • Schema разметка
              • Open Graph
              • Аналитика
              • FAQ
              • Robots.txt
              • Sitemap
OnPress OnPress
  • Документация
  • Контакты
Войти
    • Docs
        • Документация OnPress v2
            • Документация OnPress v2
              • Как устроена платформа
              • Быстрый старт
              • Доступ, роли и выбор сайта
                • Страницы
                  • Frontmatter: все поля
                  • Синтаксис markdown
                  • Языки и переводы страниц
                • Фреймы
                  • Вставки onpress/
                  • Бинды data-op-bind
                  • Сборка страницы и статическая копия
                • Готовые фреймы
                  • Фрейм assistant: страница с чатом ассистента
                  • Фрейм outline: оглавление в тексте
                  • Фрейм faq: вопросы из текста страницы
                  • Фрейм article: статья
                  • Фрейм docs: документация
                  • Фрейм site__header: шапка сайта
                  • Фрейм site__footer: подвал сайта
                  • Фрейм article__faq: вопросы из набора
                  • Фрейм landing: лендинг ассистента
                  • Фрейм assistant__chat: чат обычной разметкой
                  • Фрейм site__404: страница «не найдено»
                  • Фрейм news: лента новостей
                  • Фрейм news__category: рубрика новостей
                  • Фрейм news__post: новость
                  • Фрейм news__more: читайте ещё
                  • Фрейм news__share: поделиться
                  • Фрейм author__page: страница автора
                  • Фрейм author__byline: подпись автора
                  • Фрейм author__card: карточка автора
                  • Фрейм author__avatar: аватар автора
                  • Фрейм author__socials: соцсети автора
                  • Фрейм author__head: объявление набора автора
                  • Фрейм home: главная-документ
                  • Фрейм pricing: тарифы
                • Наборы данных и системные источники
                  • Повторитель onpress/repeat
              • Стили и оформление
              • Меню
              • Сайдбар документации
              • Языки сайта
              • Настройки, главная и кэш
              • SEO
              • Медиа
              • Сайты и домены
              • Пользователи и профиль
              • Дашборд и вход
                • Рецепты
                  • Сайт с нуля
                  • Раздел документации
                  • Лендинг из конструктора
                  • FAQ на странице
                  • Свой фрейм из готового
                  • Многоязычный сайт
                  • Поменять меню
                  • Перенести страницу
                  • Картинки в статье
                  • Список из данных
                  • Сменить оформление
                • Справочник API
                  • Справочник: страницы
                  • Справочник: переводы
                  • Справочник: фреймы
                  • Справочник: данные
                  • Справочник: меню
                  • Справочник: сайдбар документации
                  • Справочник: стили
                  • Справочник: настройки, главная, кэш
                  • Справочник: языки
                  • Справочник: SEO
                  • Справочник: медиа
                  • Справочник: сайты
                  • Справочник: пользователи и профиль
                  • Справочник: вход и служебное
                • Ошибки и частые проблемы
                  • Коды ошибок
        • Старая документация v1
            • Старая документация v1
              • Начало
              • Привязка домена
              • Виджеты
              • Структура ссылок
              • Connector.js
              • Шапка
              • Подвал
              • Мультиязычность
              • Меню
              • Как настроить стили сайта через Design
              • Schema разметка
              • Open Graph
              • Аналитика
              • FAQ
              • Robots.txt
              • Sitemap
Фреймы
Markdown
Открыть в ИИ
  • Открыть в ChatGPT
  • Открыть в Claude
  • Открыть в Gemini
  • Открыть в Perplexity
  • Открыть в Grok
  • Открыть в DeepSeek

Сборка страницы и статическая копия

У страницы с фреймом два способа попасть к посетителю: сборка на запросе (PHP собирает фрейм по шаблону для этой страницы) и статическая копия (готовый HTML лежит файлом, веб-сервер отдаёт его без PHP за миллисекунды). Какой способ выбран, решает не страница и не вы, а содержимое фрейма.

Сборка на запросе

  1. По адресу находится страница и её язык.
  2. Тема берёт фрейм страницы (_onpress_frame) и собирает его из исходника: выполняет каждую вставку onpress/… для этой страницы и этого языка, подставляет data-op-bind. Вложенные через onpress/frame фреймы собираются так же, в том же контексте.
  3. Результат оборачивается в документ темы — <head> с SEO, иконками, стилями темы, токенами дизайна, собственным CSS и счётчиками. Если фрейм сам является документом (<!doctype html>), обвязка встраивается в его <head> и <body>.
  4. Ответ кладётся в кэш страниц (WP Super Cache).

Всё, что меняется через API (меню, наборы, языки, настройки, вложенные фреймы), попадает на такие страницы на следующем же запросе — API сам сбрасывает кэш затронутых страниц.

Статическая копия

Страница становится файлом, когда выполнены все условия:

УсловиеПричина отказа (reason)
страница опубликована и без пароляnot_public
у неё есть фреймno_frame
фрейм не зависит от страницыrenders_on_request
у фрейма уже есть собранная копияno_baked_copy
адрес ложится в дерево файлов: латиница без процентов, первый сегмент не зарезервирован WordPress, адрес не занят другим приложениемbad_path

Когда условие перестаёт выполняться, копия снимается, а не остаётся устаревшей. Копия — это ответ сайта, снятый целиком, вместе с обвязкой <head>, поэтому SEO и счётчики в ней те же, что при сборке на запросе.

Состояние копии видно в трёх местах:

  • в ответе публикации — printed: {"how": "static", "url": "/promo/", "published_by": "php", …};
  • в списке и карточке страницы — static: {"published": true, "url": "/promo/", "app_key": "page-6432"};
  • в ответах PATCH /pages/{ref} и POST /frames/{ref}/assign — static с полями published, url, path, bytes, reason, was_published, was_url, removed, changed.
printed.howЧто значит
staticстраница отдаётся копией
on_requestфрейм зависит от страницы — собирается на каждом запросе
not_publishedу страницы пока нет адреса: черновик, отложена или неопубликованный родитель
themeу страницы нет фрейма. На сайте v2 это 404 — см. ниже

Когда фрейм зависит от страницы

Фрейм получает renders_on_request: true, если в нём есть хоть одно из:

ПризнакКак выглядит в live_reasons
вставки onpress/content, onpress/pager, onpress/docs-nav, onpress/outline, onpress/share-ai, onpress/featured-image, onpress/terms, onpress/assistant, onpress/faq-schema, onpress/assistant-welcome, onpress/partialinserts: op/content, …
data-op-bind с токеном page.* или атрибут вставки, целиком равный токену page.*data-op-bind uses page.* tokens
onpress/repeat с match от page.*op/repeat match uses page.* tokens
onpress/repeat с limit или offset от page.*op/repeat limit/offset uses page.* tokens
повторитель по контекстному источнику: pages.children, pages.siblings, pages.adjacent, breadcrumbscontextual sources: breadcrumbs
вложенный через onpress/frame зависимый фрейм— (правило транзитивное)

Фрейм с параметрами вызова (onpress/frame {"name":"…","agent":"…"}) и фрейм со слотом собираются на месте вызова из исходника: своей копии с чужими параметрами или чужим содержимым у них нет.

Вызов фрейма в теле страницы собирается вместе с телом. Оглавление onpress/outline в теле собирается после всего тела, поэтому видит те же заголовки и якоря, что и оглавление во фрейме страницы. Если FAQ-фреймов в теле несколько, их схемы FAQPage при сборке тела сливаются в первую, остальные снимаются.

Копия такого фрейма показала бы на всех страницах текст одной, поэтому копий у него не бывает вовсе, а его страницы всегда собираются на запросе. Не делают фрейм зависимым: onpress/faq (вопросы внутри вставки), onpress/repeat по набору без page.*, onpress/repeat {"empty":"frame"}, вложенный повторитель item.<поле>, onpress/lang-switcher, onpress/menu.

Как сделать страницу файлом. Уберите из фрейма всё зависимое. Типичный пример — лендинг: разметка целиком во фрейме, тело страницы пустое, никаких onpress/content и page.*. Оболочка статьи или документации, которая выводит тело через onpress/content, файлом не станет никогда — и это правильно.

Копии по языкам

Фрейм с языкозависимыми вставками (onpress/menu, onpress/lang-switcher, onpress/footer-columns, onpress/repeat, onpress/frame, onpress/content, onpress/socials, onpress/copyright, onpress/docs-nav, onpress/outline, onpress/share-ai, onpress/pager, onpress/partial) собирается отдельно на каждый язык сайта: копия основного языка и копии остальных. Фрейм без таких вставок собирается один раз. Страница получает копию своего языка.

Пересборка

Копии обновляются, когда меняется то, из чего они собраны. API делает это сам после каждой записи и сообщает результат полем rebaked:

ЗаписьКого пересобирает
POST/PUT/PATCH/DELETE /frames/…фреймы, вкладывающие изменённый, транзитивно
любая запись менюфреймы с onpress/menu, onpress/footer-columns, повторителями по menu.*
запись набора данных (PUT, PATCH, DELETE /data/{name})фреймы, читающие этот набор, и вкладывающие их
запись системного источника через /data/…зависимых от этого источника
"rebaked": {
  "status": "ok",
  "total": 2,
  "baked": 0,
  "not_needed": 2,
  "frames": [
    { "id": "838a082b034be249", "slug": "article__faq", "because": ["datasets: faq"], "bake": "not_needed", "detail": "renders on request from the source, has no baked copy" },
    { "id": "e627bf4dbefcc374", "slug": "article", "because": ["contains article__faq"], "bake": "not_needed", "detail": "renders on request from the source, has no baked copy" }
  ],
  "cache": { "status": "ok", "scope": "pages", "pages": [6428], "flushed": { "urls": { "status": "flushed", "urls": ["https://example.onpress.pro/tarify/"] } } }
}
ПолеСмысл
statusok — всё нужное собрано; partial — часть; failed — ничего; nothing — от изменения никто не зависит
totalсколько фреймов найдено
bakedсколько сборок сделано: языкозависимый фрейм собирается по разу на язык
not_neededфреймы на запросе — копии у них нет, собирать нечего
framesпо записи на сборку: slug, lang, because (почему попал), bake (ok, not_needed, ошибка), pages (страницы фрейма)
pagesстраницы, у которых зависимая вставка стоит прямо в теле: id и because (datasets: faq, nested frames: …, contains …); есть, только если такие нашлись
cacheсброс кэша страниц, которые собираются этими фреймами, включая фреймы на запросе, и страниц из pages. scope: "pages" — точечно по адресам; scope: "site" — весь кэш сайта, если зависимых страниц больше 400
skipped, capза один вызов пересобирается не больше 25 фреймов, остальные перечислены здесь

Неудачная пересборка никогда не отменяет запись: данные уже сохранены, копию можно пересобрать повтором или вручную.

Зависимые страницы находятся по фрейму страницы и цепочке onpress/frame внутри фреймов, а также по вставкам в теле страницы: onpress/repeat по набору, onpress/frame (и всё, что вложено в этот фрейм), привязки и прочие вставки тела разбираются так же, как во фрейме. Такие страницы приходят в pages, их кэш сбрасывается вместе с остальными.

Ручная пересборка

Нужна, когда изменение прошло мимо API — меню правили в wp-admin, опцию меняли руками — или копии надо обновить после обновления платформы:

# всё
curl -s -X POST "$API/site/$SITE/frames/rebake" \
  -H "Authorization: Bearer $OP_TOKEN" -H 'Content-Type: application/json' \
  -d '{"all": true}' | jq '.rebaked | {status, total, baked, not_needed}'

# только то, что зависит от меню и от набора faq
curl -s -X POST "$API/site/$SITE/frames/rebake" \
  -H "Authorization: Bearer $OP_TOKEN" -H 'Content-Type: application/json' \
  -d '{"menus": true, "datasets": ["faq"]}' | jq '.rebaked.frames[] | {slug, because, bake}'
Поле телаКого пересобирает
allвсе фреймы сайта
menusфреймы с меню: onpress/menu, onpress/footer-columns, повторители и бинды по menu.*
pagesфреймы, выводящие страницы, их заголовки и адреса: меню, зависимые от страницы вставки, повторители по pages.*, breadcrumbs, site.front_page, бинды page.*
languagesфреймы с языкозависимыми вставками, повторителями по site.languages, биндом site.lang
settingsфреймы с onpress/socials, onpress/copyright, повторителями по site.settings и site.front_page, биндами site.* и option.*
datasetsмассив имён наборов
framesмассив слагов или id — фреймы, вкладывающие эти

Пустое тело — 400 nothing_to_rebake. Изменения, сделанные в wp-admin, платформа ловит и сама (правка меню, сохранение записи, изменение опций ставят в очередь тех же зависимых), ручной вызов — для уверенности.

Кэш страниц

Готовые ответы кэширует WP Super Cache, и отдаются они веб-сервером. Все записи API сбрасывают кэш сами: запись фрейма, меню и набора — кэш зависимых страниц, запись CSS и токенов дизайна — весь кэш сайта, настройки, языки и SEO — весь кэш сайта и объектный кэш. Если правка не видна:

# точечно по адресам или id страниц
curl -s -X POST "$API/site/$SITE/cache/flush" \
  -H "Authorization: Bearer $OP_TOKEN" -H 'Content-Type: application/json' \
  -d '{"urls": ["/tarify/"]}' | jq .flushed

# весь кэш страниц сайта
curl -s -X POST "$API/site/$SITE/cache/flush" \
  -H "Authorization: Bearer $OP_TOKEN" -H 'Content-Type: application/json' \
  -d '{"supercache": true}' | jq .flushed

Подробно — настройки, главная и кэш. Проверяйте результат запросом без кук (curl по адресу страницы): вошедший в WordPress видит страницы мимо кэша.

Страница без фрейма и страница 404

На сайте v2 страницу выводит только её фрейм. Опубликованная страница без фрейма (или с удалённым фреймом) отвечает 404, не попадает в кэш и помечается noindex — чтобы по адресу не жила пустая или чужая разметка.

Ответ «не найдено» собирает страница сайта со слагом 404, если она опубликована и у неё есть фрейм: такой же страницей, как остальные, со своим текстом и оболочкой. Её собственный адрес тоже отвечает 404, чтобы поисковик не принял её за обычную страницу. Нет такой страницы — ответ пустой с кодом 404. Опубликуйте страницу 404 на каждом языке сайта — и все несуществующие адреса получат оформленный ответ.

Отчёт сборки

Ответ записи фрейма несёт bake.response — отчёт сборки на стороне сайта:

ПолеСмысл
bakedсобрано
bytes, source_bytesразмер результата и исходника
renders_on_requestфрейм на запросе — копии не хранится
lang, default_langязык сборки
inserts, unknown_insertsсколько вставок выполнено; вставки, которых платформа не знает
binds, bind_tagsподставленных значений и помеченных тегов
unresolvedтокены без значения
repeatsчто вывели повторители: источник, откуда взят, сколько элементов
framesвложенные фреймы: выведен ли, глубина, свои unresolved
publishedкопии страниц этого фрейма: pages[] с id, url, published, path, bytes, reason

bake.status: ok — собрано; unavailable — исполнитель на сайте не установлен, исходник сохранён; failed — исполнитель ответил ошибкой или не ответил (reason); skipped — сборка выключена ("bake": false).

arrow_backНазад
Бинды data-op-bind
Далееarrow_forward
Готовые фреймы
На этой странице
  • Сборка на запросе
    • Статическая копия
      • Когда фрейм зависит от страницы
        • Копии по языкам
          • Пересборка
            • Ручная пересборка
          • Кэш страниц
            • Страница без фрейма и страница 404
              • Отчёт сборки
              OnPress
              OnPress
              ИП Зуев И.В. ИНН: 360408359441
              © 2026
              политика конфиденциальности публичная оферта
              • visa
              • mastercard
              • sber
              • tpay