• 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
Справочник API
Markdown
Открыть в ИИ
  • Открыть в ChatGPT
  • Открыть в Claude
  • Открыть в Gemini
  • Открыть в Perplexity
  • Открыть в Grok
  • Открыть в DeepSeek

Справочник: меню

Ручки сайта: $API/site/$SITE/menus…. Чтение пунктов — источник GET /data/menu.<область>. {ref} меню — id, слаг, имя или область с тильдой (~header, также принимается @header). Во всех ручках, где есть lang, он выбирает меню языка (для ~область) или карту Polylang; theme — писать в карту областей другой темы. Как устроены меню — меню.

Каждая запись (кроме PATCH /menus/{ref}) пересобирает фреймы с меню и сбрасывает кэш их страниц — поле rebaked.

Пункт в теле: {"page": id|слаг|путь} или {"url": "…"}, плюс title, target, classes (строка через пробел), children (массив пунктов), parent (id пункта-родителя — при добавлении одного). Голое значение — ссылка на страницу. Путь в url дополняется адресом сайта.

GET /menus

curl -s -H "Authorization: Bearer $OP_TOKEN" "$API/site/$SITE/menus"
{
  "success": true,
  "site_id": "x9HTLHECq",
  "theme": "onpress-v2",
  "locations": ["header", "footer_1", "footer_2", "footer_3"],
  "default_lang": "en",
  "read_items_at": "/data/menu.{location}",
  "total": 14,
  "menus": [
    { "id": 83, "name": "header en", "slug": "header-en", "items": 3, "assigned": [ { "location": "header", "lang": "en" } ] },
    { "id": 87, "name": "footer center en", "slug": "footer-center-en", "items": 9, "assigned": [] }
  ]
}

Параметр theme — прочитать карту областей другой темы.

POST /menus

ПолеСмысл
nameобязательно
slugпо умолчанию из имени, делается уникальным
locationсразу поставить в область
langязык для карты Polylang
itemsсразу наполнить деревом
allow_invalidпропустить пункты на неопубликованные страницы
themeтема для карты областей
curl -s -X POST "$API/site/$SITE/menus" \
  -H "Authorization: Bearer $OP_TOKEN" -H 'Content-Type: application/json' \
  -d '{"name": "Проба меню", "slug": "docs-proba-menu", "items": [{"page": "proba-api", "title": "Проба"}, {"url": "https://onpress.pro/", "title": "OnPress", "target": "_blank", "classes": "btn btn--primary", "children": [{"page": "/proba-lending/"}]}]}'
{
  "success": true,
  "site_id": "x9HTLHECq",
  "theme": null,
  "menu": { "id": 171, "name": "Проба меню", "slug": "docs-proba-menu", "items": 3 },
  "items": [
    { "id": 6433, "at": "0", "title": "Проба", "type": "post_type", "page": 6428, "url": "/proba-api/", "parent": 0, "order": 1, "valid": true },
    { "id": 6434, "at": "1", "title": "OnPress", "type": "custom", "page": null, "url": "https://onpress.pro/", "parent": 0, "order": 2, "valid": true },
    { "id": 6435, "at": "1.0", "title": "Лендинг-проба", "type": "post_type", "page": 6432, "url": "/proba-lending/", "parent": 6434, "order": 3, "valid": true }
  ],
  "invalid": [],
  "rebaked": { "status": "ok", "total": 9, "…": "…" }
}

at — координата пункта в присланном дереве ("1.0" — первый ребёнок второго). Отказы: 400 menu_name_required, 400 bad_items, 400 unknown_location, 400 unknown_language, 409 polylang_inactive, 409 menu_items_unresolved (errors), 409 menu_items_invalid (invalid), 500 menu_assignment_not_stored.

PATCH /menus/{ref}

Переименовать: name и/или slug (уникальный среди меню). Пункты и области не трогаются.

curl -s -X PATCH "$API/site/$SITE/menus/docs-proba-menu" \
  -H "Authorization: Bearer $OP_TOKEN" -H 'Content-Type: application/json' -d '{"name": "Проба меню 2"}'
{ "success": true, "site_id": "x9HTLHECq", "menu": { "id": 171, "term_taxonomy_id": 171, "name": "Проба меню 2", "slug": "docs-proba-menu", "count": 4 } }

Отказы: 400 nothing_to_update, 404 menu_not_found, 409 ambiguous_menu.

DELETE /menus/{ref}

Удалить меню со всеми пунктами и освободить его области (в карте темы и в карте Polylang).

{ "success": true, "site_id": "x9HTLHECq", "deleted": { "id": 171, "name": "Проба меню 2", "slug": "docs-proba-menu" }, "removed_items": 2, "freed_locations": [] }

PUT /menus/{ref}/location

ПолеСмысл
locationобязательно: header, footer_1, footer_2, footer_3
langязык; без него или с основным пишется и карта темы
themeтема для карты областей

Записанные карты перечитываются и сверяются. Отказы: 400 location_required (в том числе пустая строка — снять меню с области этой ручкой нельзя), 400 unknown_location (locations), 400 unknown_language, 409 polylang_inactive, 500 menu_assignment_not_stored (read_back), 404 menu_not_found.

PUT /menus/{ref}/items

Положить дерево пунктов целиком.

ПолеСмысл
itemsобязательно: дерево пунктов
allow_invalidпропустить пункты на неопубликованные страницы
lang, themeдля ~область
curl -s -X PUT "$API/site/$SITE/menus/171/items" \
  -H "Authorization: Bearer $OP_TOKEN" -H 'Content-Type: application/json' \
  -d '{"items": [{"page": "proba-api"}, {"url": "/docs/", "title": "Документация"}]}'
{
  "success": true,
  "site_id": "x9HTLHECq",
  "menu": { "id": 171, "name": "Проба меню 2", "slug": "docs-proba-menu" },
  "total": 2,
  "invalid": [],
  "items": [
    { "id": 6437, "at": "0", "title": "Проба API", "type": "post_type", "page": 6428, "url": "/proba-api/", "parent": 0, "order": 1, "valid": true },
    { "id": 6438, "at": "1", "title": "Документация", "type": "custom", "page": null, "url": "https://test.onpress.pro/docs/", "parent": 0, "order": 2, "valid": true }
  ],
  "read_items_at": "/data/menu.{location}",
  "rebaked": { "…": "…" }
}

Отказы: 400 bad_items, 409 menu_items_unresolved, 409 menu_items_invalid, 404 menu_not_found, 404 menu_not_assigned (для ~область без меню).

POST /menus/{ref}/items

Добавить один пункт в конец уровня (parent — к родителю). Тело — {"item": {…}} или сам пункт.

curl -s -X POST "$API/site/$SITE/menus/171/items" \
  -H "Authorization: Bearer $OP_TOKEN" -H 'Content-Type: application/json' -d '{"item": {"page": "docs", "title": "Доки"}}'
{ "success": true, "site_id": "x9HTLHECq", "menu": { "id": 171, "name": "Проба меню" }, "item": { "id": 6436, "title": "Доки", "type": "post_type", "page": 6183, "url": "/docs/", "parent": 0, "order": 4, "valid": true }, "total": 4 }

Отказы: 400 item_target_required, 404 page_not_found, 409 menu_items_invalid, 404 item_not_found (родитель).

PATCH /menus/{ref}/items/{id}

Поля: title, page, url, target, classes, parent. page превращает пункт в пункт-страницу, url — в ссылку.

{ "success": true, "site_id": "x9HTLHECq", "menu": { "id": 171, "name": "Проба меню 2" }, "item": { "id": 6434, "title": { "from": "OnPress", "to": "OnPress.pro" }, "url": "https://onpress.pro/docs/" }, "warnings": [] }

Отказы: 404 item_not_found, 409 bad_parent (пункт сам себе родитель), 404 page_not_found, 409 menu_items_invalid.

DELETE /menus/{ref}/items/{id}

Удалить пункт вместе с веткой.

{ "success": true, "site_id": "x9HTLHECq", "menu": { "id": 171, "name": "Проба меню 2" }, "removed": [6434, 6435], "total": 2 }

POST /menus/{ref}/reorder

ПолеСмысл
orderобязательно: id пунктов уровня в нужном порядке
parentid родителя уровня, 0 — верхний (по умолчанию)
{ "success": true, "site_id": "x9HTLHECq", "menu": { "id": 171, "name": "Проба меню 2" }, "parent": 0, "order": [6436, 6433, 6434], "appended": [6434] }

Неназванные пункты уровня встают после названных (appended). Отказы: 400 bad_reorder, 404 item_not_found.

arrow_backНазад
Справочник: данные
Далееarrow_forward
Справочник: сайдбар документации
На этой странице
  • GET /menus
    • POST /menus
      • PATCH /menus/{ref}
        • DELETE /menus/{ref}
          • PUT /menus/{ref}/location
            • PUT /menus/{ref}/items
              • POST /menus/{ref}/items
                • PATCH /menus/{ref}/items/{id}
                  • DELETE /menus/{ref}/items/{id}
                    • POST /menus/{ref}/reorder
                    OnPress
                    OnPress
                    ИП Зуев И.В. ИНН: 360408359441
                    © 2026
                    политика конфиденциальности публичная оферта
                    • visa
                    • mastercard
                    • sber
                    • tpay