Перейти к содержимому

Создать статическую сборку

POST
/wp-json/wp2lms/static-builder/v1/builds
curl --request POST \
--url 'https://example.com/wp-json/wp2lms/static-builder/v1/builds?blog_id=1' \
--header 'Content-Type: application/json' \
--header 'X-WP-Nonce: <X-WP-Nonce>' \
--data '{ "page_ids": [ 42, 57 ], "course_name": "Основы информационной безопасности", "api_type": "scorm", "course_id": "course-infosec-101", "version": 1, "export_mode": "package" }'

Создаёт черновик CPT wp2lms_static_build, пишет ACF/флаги и страницы, публикует запись и отдаёт полный serialize. Генерация пакета не стартует: это не POST …/run. Нужен непустой page_ids или валидный build_course_id (ID CPT wp2lms_courses). Без обоих — 400 pages_required. При build_course_id без page_ids страницы берутся из структуры курса (CourseBuildSync::apply_course_to_build); пустой курс — 400 empty_course. Несуществующий/не-курс — 404 course_not_found. Если переданы оба — линк по build_course_id, страницы из явных page_ids. Каждый id в page_ids — существующая post_type=page; иначе 400 invalid_page_ids / page_not_found. Первый элемент — главная (main_page_id). Можно не передавать api_type — в ответе будет ACF apiType или local. version если не передать — 1. export_mode если не передать — package. Нужно manage_network или edit_pages. Cookie + X-WP-Nonce или Application Password.

blog_id
integer
>= 1

ID сайта мультисети, на котором читать/писать сборки. Необязательно: PHP берёт get_current_blog_id(). ≤ 0 — 400 invalid_blog. Чужой/несуществующий сайт — 404 blog_not_found. На одиночном сайте обычно не передают.

Example
1
Media typeapplication/json

Нужен непустой page_ids или валидный build_course_id (или оба).

object
page_ids

ID страниц курса в порядке пакета. Необязателен, если передан build_course_id. Непустой массив положительных ID существующего post_type=page; иначе 400 invalid_page_ids / page_not_found. Первый элемент — главная страница. PHP делает array_unique.

Array<integer>
build_course_id

ID CPT wp2lms_courses. Пишет meta ssb_course_id (config.build_course_id). Без page_ids страницы берутся из структуры курса. Несуществующий id — 404 course_not_found; пустой курс — 400 empty_course.

integer
>= 1
course_name

Отображаемое имя курса (ACF courseName). Необязательно; при build_course_id без явного имени подставляется title курса.

string
api_type

Тип пакета (ACF apiType). Необязательно. Иное значение — 400 invalid_api_type. Если не передать — в ответе apiType или local.

string
Allowed values: local scorm xapi
course_id

Идентификатор курса в LMS/xAPI (строка ACF), не WP post ID. Ключ ACF зависит от api_type.

string
version

Версия пакета (ACF version), float ≥ 1. Меньше 1 — 400 invalid_version. Если не передать — get_version_number даёт 1.

number
>= 1
course_comment

Служебный комментарий (ACF courseComment). Необязательно.

string
export_mode

Package — ZIP/SCORM-пакет; live — живой просмотр. Иное — 400 invalid_export_mode. Если не передать — get_export_mode даёт package.

string
Allowed values: package live
is_primary

Избранная сборка курса (meta ssb_is_primary). Не больше одной на build_course_id / ssb_course_id: при true снимается у siblings. Без линка на курс — 400 primary_requires_course. Та же звезда в метабоксе «Сборки» на экране курса.

boolean
Examples

Явные page_ids

{
"page_ids": [
42,
57
],
"course_name": "Основы информационной безопасности",
"api_type": "scorm",
"course_id": "course-infosec-101",
"version": 1,
"export_mode": "package"
}

Сборка создана и опубликована. Тело — полный BuildService::serialize (config, страницы, статус, URL).

Media typeapplication/json
object
id

ID записи CPT wp2lms_static_build.

integer
status

BuildStatus->value: new, pending, building, completed, error, stopped, rebuild, build, stopping. После create обычно new; после async run — pending.

string
terminal

True для completed, error, stopped.

boolean
config
object
course_name

ACF courseName в сохранённой сборке.

string
api_type

ACF apiType; пустое PHP подменяет на local.

string
course_id

ACF courseID (get_course_id), может быть пустой строкой.

string
build_course_id

ID связанного CPT wp2lms_courses (meta ssb_course_id). 0 если не привязана.

integer
version

Число версии из ACF (get_version_number), по умолчанию 1.

number
course_comment

ACF courseComment.

string
export_mode

Package или live (get_export_mode; иное/пустое → package).

string
page_ids

ID страниц в порядке пакета; первый = главная.

Array<integer>
main_page_id

ID главной страницы (get_main_page), обычно page_ids[0].

integer
is_primary

Избранная сборка курса (meta ssb_is_primary). Не больше одной на связанный курс; звезда в метабоксе «Сборки».

boolean
use_sections_in_menu

True, если хотя бы у одной выбранной страницы есть термин таксономии секций. Сайтовая опция через REST не задаётся.

boolean
disable_auto_addition_data

Сайтовая настройка Static Builder disableAutoAdditionData (не поле тела REST).

boolean
not_include_media_files_build

Для package — сайтовая notIncludeMediaFilesBuild; для live PHP всегда false.

boolean
save_external_files

Для package — saveExternalFiles (null → true); для live всегда false (внешние файлы не качаются).

boolean
revision

Номер ревизии сборки из мета (get_revision_number).

integer
logs

Журнал шагов (get_logs(true) — новые сверху). После create обычно [].

Array<object>
object
time

Unix-время записи шага сборки (0, если в мета нет time).

integer
level

Уровень записи лога сборки (info, если в мета нет level).

string
message

Текст шага генерации пакета.

string
view_url

URL просмотра (index.html / live). Не null только при status=completed и существующем view на диске; иначе null (в т.ч. сразу после create). Для live и package — если файл есть.

string
nullable
zip_url

URL ZIP-пакета. Не null только при completed и существующем архиве (типично package / scorm / xapi). Для live ZIP часто отсутствует — тогда null.

string
nullable
files_url

URL каталога {uploads}/wp2lms-static/{id}/. Всегда строка, даже если файлов ещё нет.

string
edit_url

Сырая ссылка wp-admin на карточку сборки (get_edit_post_link(..., 'raw')).

string
nullable
blog_id

ID сайта, на котором лежит сборка (get_current_blog_id после switch_to_blog).

integer
Example
{
"id": 128,
"status": "new",
"terminal": false,
"config": {
"course_name": "Основы информационной безопасности",
"api_type": "scorm",
"course_id": "course-infosec-101",
"build_course_id": 42,
"version": 1,
"course_comment": "Пакет для LMS",
"export_mode": "package"
},
"page_ids": [
42,
57
],
"main_page_id": 42,
"use_sections_in_menu": false,
"disable_auto_addition_data": false,
"not_include_media_files_build": false,
"save_external_files": true,
"revision": 0,
"logs": [],
"view_url": null,
"zip_url": null,
"files_url": "https://pulse.example.com/wp-content/uploads/wp2lms-static/128/",
"edit_url": "https://pulse.example.com/wp-admin/post.php?post=128&action=edit",
"blog_id": 1
}

Pages_required — нет page_ids и build_course_id; empty_course — курс без страниц; invalid_page_ids / page_not_found; invalid_api_type / invalid_version / invalid_export_mode; invalid_blog.

Media typeapplication/json
object
code

Машинный код WP_Error (например wp2lms_static_builder_busy, rest_forbidden, invalid_nonce).

string
message

Человекочитаемое сообщение ошибки из PHP / WordPress REST.

string
data

Обычно { status: <HTTP-код> }. Если status нет, ядро REST часто отдаёт 500.

object
key
additional properties
any
Example
{
"code": "wp2lms_static_builder_busy",
"message": "Build is currently building and cannot be updated.",
"data": {
"status": 409
}
}

Не аутентифицирован. DualRest: rest_forbidden (status 401), если нет cookie-сессии. Cookie + X-WP-Nonce или Application Password.

Media typeapplication/json
object
code

Машинный код WP_Error (например wp2lms_static_builder_busy, rest_forbidden, invalid_nonce).

string
message

Человекочитаемое сообщение ошибки из PHP / WordPress REST.

string
data

Обычно { status: <HTTP-код> }. Если status нет, ядро REST часто отдаёт 500.

object
key
additional properties
any
Example
{
"code": "wp2lms_static_builder_busy",
"message": "Build is currently building and cannot be updated.",
"data": {
"status": 409
}
}

Нет права manage_network (мультисайт) или edit_pages (одиночный сайт); невалидный REST nonce rest_cookie_invalid_nonce.

Media typeapplication/json
object
code

Машинный код WP_Error (например wp2lms_static_builder_busy, rest_forbidden, invalid_nonce).

string
message

Человекочитаемое сообщение ошибки из PHP / WordPress REST.

string
data

Обычно { status: <HTTP-код> }. Если status нет, ядро REST часто отдаёт 500.

object
key
additional properties
any
Example
{
"code": "wp2lms_static_builder_busy",
"message": "Build is currently building and cannot be updated.",
"data": {
"status": 409
}
}

Course_not_found — нет CPT курса; blog_not_found — сайта нет или он в другой сети.

Media typeapplication/json
object
code

Машинный код WP_Error (например wp2lms_static_builder_busy, rest_forbidden, invalid_nonce).

string
message

Человекочитаемое сообщение ошибки из PHP / WordPress REST.

string
data

Обычно { status: <HTTP-код> }. Если status нет, ядро REST часто отдаёт 500.

object
key
additional properties
any
Example
{
"code": "wp2lms_static_builder_busy",
"message": "Build is currently building and cannot be updated.",
"data": {
"status": 409
}
}

Wp2lms_static_builder_create_failed — wp_insert_post вернул WP_Error; configure_failed — исключение при ACF/страницах (черновик тогда удаляется).

Media typeapplication/json
object
code

Машинный код WP_Error (например wp2lms_static_builder_busy, rest_forbidden, invalid_nonce).

string
message

Человекочитаемое сообщение ошибки из PHP / WordPress REST.

string
data

Обычно { status: <HTTP-код> }. Если status нет, ядро REST часто отдаёт 500.

object
key
additional properties
any
Example
{
"code": "wp2lms_static_builder_busy",
"message": "Build is currently building and cannot be updated.",
"data": {
"status": 409
}
}