• Как устроено
  • Быстрый старт
  • Доступ и токен
    • Страницы
      • 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
      • Медиа
      • Сайты
      • Пользователи и профиль
      • Вход и служебное
    • Ошибки и проблемы
      • Коды ошибок
OnPress OnPress
  • Документация
  • Контакты
Войти
  • Как устроено
  • Быстрый старт
  • Доступ и токен
    • Страницы
      • 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
      • Медиа
      • Сайты
      • Пользователи и профиль
      • Вход и служебное
    • Ошибки и проблемы
      • Коды ошибок
Справочник 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