Развернуть динамические шорткоды
const url = 'https://example.com/wp-json/wp2lms/turbo/v1/dsh/expand';const options = { method: 'POST', headers: {'Content-Type': 'application/json'}, body: '{"items":[{"id":"island-hero","src":"e2RzaDpwb3N0OmNvbnRlbnR9","post_id":42}],"post_id":42}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://example.com/wp-json/wp2lms/turbo/v1/dsh/expand \ --header 'Content-Type: application/json' \ --data '{ "items": [ { "id": "island-hero", "src": "e2RzaDpwb3N0OmNvbnRlbnR9", "post_id": 42 } ], "post_id": 42 }'Публично разворачивает острова Dynamic Shortcodes для гидрации на Turbo-странице. PHP: до 40 элементов (Expander::MAX_ITEMS); src — base64url исходника шорткода (decodeSrc), не сырой {dsh:…} в JSON. Корневой post_id задаёт $GLOBALS['post'] для контекста; у элемента свой post_id важнее.
Пустой/немассив items или все элементы отброшены (пустой id/src, битый base64) — 400 invalid_items. Больше 40 — 400 too_many_items. Плагин Dynamic Shortcodes недоступен или фильтр wp2turbo/dsh/enable выключил мост — 403 disabled. Нужен nonce wp_rest (403 invalid_nonce).
Это не GET …/static/{id} и не heartbeat data[wp2t_dsh]. В REST нет 503: heartbeat-фоллбэк 503 в эту ручку не мапится. Cookie-сессия не требуется.
Request Bodyrequired
Заголовок раздела «Request Bodyrequired»object
Острова для разворота, максимум 40. Пустой массив или не массив — 400 invalid_items. Можно передать JSON-строку — PHP json_decode.
object
Клиентский id острова гидрации (ключ в ответе expansions[].id). Пустой id PHP отбрасывает.
Исходник шорткода в base64url (Expander::encodeSrc / decodeSrc), не сырой {dsh:…}. Пустой или недекодируемый — элемент пропускается. Лимит декодированного src — 16384 байт.
Контекст записи для этого острова (важнее корневого post_id). 0 / отсутствие — берётся корневой post_id.
ID записи для setup_postdata / дефолтного embed post:content, если у элемента нет своего post_id.
Example
{ "items": [ { "id": "island-hero", "src": "e2RzaDpwb3N0OmNvbnRlbnR9", "post_id": 42 } ], "post_id": 42}Responses
Заголовок раздела «Responses»Ok, список expansions (id, html, опционально hash), объект assets (styles/scripts/headScripts), свежий nonce wp_rest.
object
PHP всегда true на HTTP 200.
Список островов в порядке обработки, не объект с ключами id.
object
Тот же id острова, что в запросе.
Развёрнутый HTML. При ошибке острова — HTML-комментарий <!-- dsh-error: … -->, не WP_Error всей ручки.
ContentHash фрагмента, только если остров — embed post:content через StaticPageRenderer.
object
CSS, нужный вставленным островам.
object
URL стиля или скрипта; у inline-скрипта может быть null.
Инлайн-JS, если PHP отдал ключ inline.
Скрипты тела страницы.
object
URL стиля или скрипта; у inline-скрипта может быть null.
Инлайн-JS, если PHP отдал ключ inline.
Скрипты для head.
object
URL стиля или скрипта; у inline-скрипта может быть null.
Инлайн-JS, если PHP отдал ключ inline.
Свежий wp_create_nonce(‘wp_rest’) для следующего expand.
Example
{ "ok": true, "expansions": [ { "id": "island-hero", "html": "<p>Иван Петров</p>" } ], "assets": { "styles": [], "scripts": [], "headScripts": [] }, "nonce": "a1b2c3d4e5"}Invalid_items — нет валидных островов; too_many_items — больше 40 items.
object
Машинный код WP_Error (например wp2lms_static_builder_busy, rest_forbidden, invalid_nonce).
Человекочитаемое сообщение ошибки из PHP / WordPress REST.
Обычно { status: <HTTP-код> }. Если status нет, ядро REST часто отдаёт 500.
object
Example
{ "code": "wp2lms_static_builder_busy", "message": "Build is currently building and cannot be updated.", "data": { "status": 409 }}Disabled — нет Dynamic Shortcodes или фильтр wp2turbo/dsh/enable=false; invalid_nonce — нет/неверный wp_rest nonce.
object
Машинный код WP_Error (например wp2lms_static_builder_busy, rest_forbidden, invalid_nonce).
Человекочитаемое сообщение ошибки из PHP / WordPress REST.
Обычно { status: <HTTP-код> }. Если status нет, ядро REST часто отдаёт 500.
object
Example
{ "code": "wp2lms_static_builder_busy", "message": "Build is currently building and cannot be updated.", "data": { "status": 409 }}