Дашборд
Веб-приложение вне WordPress для той же работы, что делает API: сайты, дерево страниц, фреймы и данные — вход по вашему токену op_.
Дашборд — одностраничное приложение по адресу https://stagepress.bond/dashboard/. Он живёт вне WordPress и не зависит от темы: собственных данных у него нет, каждый экран — вызов API v1 или v2 с вашим персональным токеном. Это первый шаг v2 прочь от wp-admin, а не вторая админка.
Вход
Экран входа просит одно: «Paste your personal API token to continue». Это тот же токен op_, что и для API, — op_ и 64 шестнадцатеричных символа в нижнем регистре; строку другой формы дашборд отклоняет, не делая запроса. Как выпустить токен — в разделе Аутентификация. Ни логина, ни пароля, ни куки WordPress здесь нет.
При входе дашборд спрашивает у WordPress, кто вы (GET /wp-json/wp/v2/users/me?context=edit), и кладёт токен в localStorage браузера под ключом onpress:token. Любой ответ 401 от главного домена разлогинивает и возвращает на /dashboard/login — именно это происходит после перевыпуска токена, в пределах минуты, на которую API кэширует проверку. Ответ 401 от домена отдельного сайта показывается ошибкой внутри раздела: один неисправный сайт не обрывает сессию.
Разделы
| Раздел | Что показывает | Что пишет |
|---|---|---|
| Sites | все сайты сети, к которым у вас есть доступ: адрес, цифры Яндекс Метрики, GA4, Search Console и Яндекс Вебмастера, Web Vitals, счётчики контента, теги | теги, раскладку колонок |
| Pages | дерево страниц текущего сайта с инлайн-правкой и поиском | заголовок, статус, слаг, SEO-поля, порядок, массовые действия |
| Frames | фреймы текущего сайта; строка открывает разметку фрейма рядом со списком. Адреса у фрейма нет, поэтому колонок с адресом и ссылкой здесь тоже нет | ничего |
| Data | наборы данных текущего сайта с языковыми вариантами; строка открывает JSON набора; под таблицей — список системных источников | ничего |
Sites. «Open in dashboard» делает сайт текущим и ведёт в Pages. «WP admin» открывает wp-admin сайта по одноразовой ссылке входа, отдельно логиниться в WordPress не нужно.
Pages. У дерева пять видов с разным набором колонок: Default (статус, фрейм, путь, язык), SEO (ключ, SEO-заголовок и описание, index, follow, canonical), Topic (ключ, тема, целевая ссылка и её анкор), Content (статус, контент, структура, число символов, заметка) и Index (статус индексации в Google, причина, последний обход). Вид и колонки живут в адресе (/dashboard/pages?view=seo), так что ссылка открывает ту же таблицу. Ячейки правятся на месте. Поиск идёт по заголовку, пути, слагу, ключу, теме, заметке и id и показывает совпадения вместе с предками; перетаскивание на время поиска выключено. Блочный редактор и «Create in editor» открывают wp-admin сайта в новой вкладке.
Frames и Data намеренно только для чтения: ни одного запроса, кроме GET. Фреймы фильтруются по блоку и ищутся по строке; фреймы, которые печатаются на запросе, помечены тегом live. Как фреймы и наборы записываются — в разделах Фреймы и Данные.
Где искать адреса. Все адреса сайта — в Pages, включая лендинг: фрейм это шаблон, своего адреса у него нет. Поэтому ответ на вопрос «что сайт отдаёт по /home/» всегда строка в Pages, а фрейм, которым она печатается, назван в её поле frame.
Колонки шаблона больше нет: в v2 шаблонов темы не существует, и в виде Default на её месте стоит фрейм — слаг и имя фрейма, в котором печатается страница, и прочерк, если страницу рисует тема.
Текущий сайт
Все разделы, кроме Sites, работают с одним сайтом, который выбирается переключателем в шапке. Выбор хранится в localStorage под ключом onpress:site; по умолчанию это тестовый сайт документации, если у вас есть к нему доступ, иначе первый сайт в списке.
Куда он ходит
Frames и Data обращаются к API v2 — $BASE/frames, $BASE/data, $BASE/data/sources — с сайтом в заголовке X-OnPress-Blog-Id. Sites и Pages обращаются к API v1 на домене самого сайта — /wp-json/onpress/v1/sites, /pages-tree, /pages/{id}/…, — потому что эти ручки в v2 ещё не переехали. Оба API принимают один и тот же токен op_: v1 — через адаптер в mu-плагине onpress-api-keys, и на кросс-доменные запросы он отвечает только origin-у самого дашборда.
Интерфейс только на английском, слоя переводов нет.