Справочник: языки
Ручки сайта: $API/site/$SITE/languages…. Сайт без Polylang отвечает 409 polylang_inactive на любую. Все ручки, кроме GET /languages/{lang}, отвечают полным состоянием — default, settings, languages — и записи несут cache (что сброшено). Подробно — языки сайта.
Поля языка: slug, locale, name, rtl, order, flag, flag_url, is_default, term_id, w3c, url, front_page ({id, url} или null), counts ({posts, terms}).
GET /languages
curl -s -H "Authorization: Bearer $OP_TOKEN" "$API/site/$SITE/languages"
{
"success": true,
"site_id": "x9HTLHECq",
"default": "en",
"settings": { "force_lang": 1, "hide_default": true, "redirect_lang": true, "rewrite": true, "browser": false, "media_support": true },
"languages": [
{ "slug": "en", "locale": "en_US", "name": "English", "rtl": false, "order": 0, "flag": "us", "flag_url": "https://test.onpress.pro/wp-content/plugins/polylang-pro/vendor/wpsyntex/polylang/flags/us.png", "is_default": true, "term_id": 88, "w3c": "en-US", "url": "https://test.onpress.pro/", "front_page": { "id": 5776, "url": "https://test.onpress.pro/" }, "counts": { "posts": 41, "terms": 8 } },
{ "slug": "ru", "locale": "ru_RU", "name": "Русский", "rtl": false, "order": 0, "flag": "ru", "is_default": false, "term_id": 91, "w3c": "ru-RU", "url": "https://test.onpress.pro/ru/", "front_page": { "id": 6037, "url": "https://test.onpress.pro/ru/" }, "counts": { "posts": 37, "terms": 1 } }
]
}
GET /languages/{lang}
{ "success": true, "site_id": "x9HTLHECq", "language": { "slug": "ru", "locale": "ru_RU", "name": "Русский", "…": "…" } }
Отказы: 404 language_not_found, 400 invalid_language.
POST /languages
| Поле | Смысл |
|---|---|
locale | обязательно: en_US, ru_RU, ar, zh_CN |
slug, name, rtl, flag, order | переопределить значения Polylang |
default_category | создать рубрику для языка (по умолчанию нет) |
curl -s -X POST "$API/site/$SITE/languages" \
-H "Authorization: Bearer $OP_TOKEN" -H 'Content-Type: application/json' -d '{"locale": "de_DE"}'
{ "success": true, "site_id": "x9HTLHECq", "changed": true, "language": { "slug": "de", "name": "Deutsch", "url": "https://test.onpress.pro/de/", "front_page": null, "…": "…" }, "default": "en", "settings": { "…": "…" }, "languages": [ "…" ], "cache": { "…": "…" } }
201 — создан, 200 с changed: false — уже был ровно таким. Отказы: 400 locale_required, 400 invalid_locale, 400 locale_unknown, 400 invalid_language, 400 invalid_name, 400 invalid_flag, 400 invalid_order, 400 unknown_field, 409 language_exists (diff), Polylang: 400 pll_* (details).
PATCH /languages/{lang}
Поля slug, locale, name, rtl, flag, order. Ответ: changed, diff (при изменении), полное состояние. Смена слага меняет адреса всех страниц языка. Отказы: 400 nothing_to_change, 404 language_not_found, проверки полей как у POST, 400 pll_invalid_slug, 400 pll_non_unique_slug, 400 pll_invalid_locale, 400 pll_invalid_flag, 400 pll_invalid_name.
DELETE /languages/{lang}
| Параметр (строка запроса или тело) | Смысл |
|---|---|
force | удалить, даже если у языка есть содержимое |
curl -s -X DELETE "$API/site/$SITE/languages/de" -H "Authorization: Bearer $OP_TOKEN"
{ "success": true, "site_id": "x9HTLHECq", "changed": true, "deleted": true, "usage": { "posts": 0, "pages": 0, "terms": 0 }, "language": { "slug": "de", "…": "…" }, "default": "en", "settings": { "…": "…" }, "languages": [ "…" ], "cache": { "…": "…" } }
Отказы: 409 language_in_use (usage; снимается force), 409 language_is_default, 409 last_language, 404 language_not_found, 500 language_delete_failed.
PUT /languages/default
| Поле | Смысл |
|---|---|
lang | новый язык по умолчанию (синонимы language, slug) |
Ответ: changed, was (прежний, при изменении), language, полное состояние. Отказы: 404 language_not_found.
PATCH /languages
Настройки адресов языков: force_lang (1 — каталог, 2 — поддомен, 3 — домен), hide_default, redirect_lang, rewrite, browser, media_support. Применяются начиная с force_lang. Ответ: changed — список записанных ключей, before, settings — перечитанные после записи, полное состояние.
curl -s -X PATCH "$API/site/$SITE/languages" \
-H "Authorization: Bearer $OP_TOKEN" -H 'Content-Type: application/json' -d '{"hide_default": true, "redirect_lang": true}'
Отказы: 400 nothing_to_change, 400 unknown_field, 400 invalid_force_lang.