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

Загрузить содержимое пакета (ZIP/HTML)

POST
/wp-json/wp2lms-pro/embed-packages/v1/packages/{id}/content
curl --request POST \
--url 'https://example.com/wp-json/wp2lms-pro/embed-packages/v1/packages/42/content?blog_id=1' \
--header 'Content-Type: application/json' \
--header 'X-WP-Nonce: <X-WP-Nonce>' \
--data '{ "files": { "index.html": "<!doctype html><html lang=\"ru\"><title>Главная</title><h1>Старт</h1></html>", "about.html": "<!doctype html><html lang=\"ru\"><title>О курсе</title><p>Введение</p></html>" } }'

Заменяет файлы существующего пакета (ingest_from_request с required=true). Предыдущая версия архивируется (PackageVersioning::archive_current), если meta уже было. Это не PATCH title/status и не materialize страниц. Нужно передать содержимое: multipart file / package_file / package_zip (zip или html/htm), либо JSON files, либо JSON html. Иначе 400 embed_packages_content_required. Чужое расширение multipart — 400 embed_packages_bad_file. Не пакет — 404 embed_packages_not_found. Нужно manage_network (multisite) или edit_pages. Cookie + X-WP-Nonce или Application Password.

id
required
integer
>= 1

ID записи CPT wp2lms_embed_pkg (поле id в payload). Не blog_id и не page_id. Несуществующий id или другой post_type — 404 embed_packages_not_found.

Example
42
blog_id
integer
>= 1

ID сайта сети (switch_to_blog). Необязательно: по умолчанию текущий блог запроса. Не ID пакета и не page_id. Минимум 1; на одиночном сайте должен совпадать с текущим — иначе 400 embed_packages_invalid_blog. В сети неизвестный сайт или сайт другой сети — 404 embed_packages_unknown_blog.

Example
1
object
html

Сырой HTML launch-файла (index.html), если нет files/multipart. На этой ручке содержимое обязательно — иначе 400 embed_packages_content_required.

string
files

Карта относительных путей к содержимому. Ключ — безопасный относительный путь (PackageFilePolicy). Пустой объект PHP не считает деревом. Небезопасный путь — unsafe_path; чужое расширение — disallowed_extension.

object
key
additional properties
One of:

Сырой текст файла (HTML/CSS/JS).

string
Example
{
"files": {
"index.html": "<!doctype html><html lang=\"ru\"><title>Главная</title><h1>Старт</h1></html>",
"about.html": "<!doctype html><html lang=\"ru\"><title>О курсе</title><p>Введение</p></html>"
}
}

Содержимое записано, манифест пересчитан. Тело — package_payload.

Media typeapplication/json

Ответ package_payload — запись CPT плюс плоские поля из meta и полный объект meta.

object
id

ID записи CPT wp2lms_embed_pkg. Совпадает с {id} в path GET/PATCH/DELETE/content/materialize-pages.

integer
title

post_title пакета. После ingest PHP может заменить его на <title> launch-файла.

string
status

post_status пакета. REST принимает publish/draft/private; в ответе то, что лежит в БД.

string
content_type

Копия meta.content_type (web / scorm1.2 / scorm2004 / xapi или пусто).

string
content_tool

Копия meta.content_tool (детектор автора или пустая строка).

string
launch_path

Копия meta.launch_path — относительный HTML запуска, не URL.

string
launch_url

Абсолютный URL запуска (uploads baseurl + storage_rel + launch_path). Пусто, если содержимого нет.

string format: uri
activity_id

Копия meta.activity_id.

string
storage_rel

Копия meta.storage_rel — каталог в uploads, не URL.

string
is_multipage

Копия meta.is_multipage (true только для web без tool и ≥2 HTML).

boolean
pages

Копия meta.pages — индекс HTML внутри пакета, не страницы WordPress.

Array<object>
object
path

Относительный путь HTML внутри каталога пакета (posix, без ведущего /). Из PackagePagesIndex::scan.

string
title

Заголовок из <title> файла или имя без расширения, если тега нет.

string
meta

Полный массив post meta _wp2lms_embed_package (PackageMeta::get). У пакета без ingest — пустой объект.

object
content_type

Тип после ManifestPipeline — web, scorm1.2, scorm2004 или xapi. Пусто, пока содержимое не залито.

string
version

Версия из манифеста (для SCORM часто совпадает с content_type). Для web обычно пустая строка.

string
activity_id

XAPI activity id. Если парсер не дал — {home}wp2lms-embed-package/{id}.

string
launch_path

Относительный HTML запуска внутри storage (из манифеста или fallback index.html).

string
title

Заголовок из launch HTML / манифеста; PHP может перезаписать post_title пакета этим значением.

string
mastery_score

Mastery score из imsmanifest (SCORM), иначе null.

number
nullable
content_tool

Детектор автора: ispring, articulate_rise, articulate_storyline, articulate_presenter, captivate, elucidat или пустая строка.

string
storage_rel

Путь от uploads basedir, wp2lms-embed-packages/{id}/.

string
uploaded_at

Unix-время последней успешной записи содержимого (time() в finalize).

integer
is_multipage

True только для content_type=web без content_tool и ≥2 HTML в индексе.

boolean
pages

Индекс HTML (path+title), если пакет multipage; иначе [].

Array<object>
object
path

Относительный путь HTML внутри каталога пакета (posix, без ведущего /). Из PackagePagesIndex::scan.

string
title

Заголовок из <title> файла или имя без расширения, если тега нет.

string
Example
{
"id": 42,
"title": "Главная",
"status": "publish",
"content_type": "web",
"content_tool": "",
"launch_path": "index.html",
"launch_url": "https://lms.example.com/wp-content/uploads/wp2lms-embed-packages/42/index.html",
"activity_id": "https://lms.example.com/wp2lms-embed-package/42",
"storage_rel": "wp2lms-embed-packages/42/",
"is_multipage": true,
"pages": [
{
"path": "index.html",
"title": "Главная"
},
{
"path": "about.html",
"title": "О курсе"
}
],
"meta": {
"content_type": "web",
"version": "",
"activity_id": "https://lms.example.com/wp2lms-embed-package/42",
"launch_path": "index.html",
"title": "Главная",
"mastery_score": null,
"content_tool": "",
"storage_rel": "wp2lms-embed-packages/42/",
"uploaded_at": 1726252800,
"is_multipage": true,
"pages": [
{
"path": "index.html",
"title": "Главная"
},
{
"path": "about.html",
"title": "О курсе"
}
]
}
}

Embed_packages_content_required — нет multipart, html и files; embed_packages_bad_file — файл не ZIP/HTML; embed_packages_invalid_blog — некорректный blog_id.

Media typeapplication/json
object
code

Код WP_Error (get_error_code()), например embed_packages_not_found.

string
message

Текст WP_Error (get_error_message()).

string
data

Data WP_Error. Обычно { "status": 404 }. Ошибки ingest/materialize без status WordPress REST отдаёт как 500.

object
Example
{
"code": "embed_packages_not_found",
"message": "Package not found.",
"data": {
"status": 404
}
}

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

Media typeapplication/json
object
code

Код WP_Error (get_error_code()), например embed_packages_not_found.

string
message

Текст WP_Error (get_error_message()).

string
data

Data WP_Error. Обычно { "status": 404 }. Ошибки ingest/materialize без status WordPress REST отдаёт как 500.

object
Example
{
"code": "embed_packages_not_found",
"message": "Package not found.",
"data": {
"status": 404
}
}

Нет права manage_network (multisite) или edit_pages (одиночный сайт), либо невалидный REST nonce (rest_cookie_invalid_nonce).

Media typeapplication/json
object
code

Код WP_Error (get_error_code()), например embed_packages_not_found.

string
message

Текст WP_Error (get_error_message()).

string
data

Data WP_Error. Обычно { "status": 404 }. Ошибки ingest/materialize без status WordPress REST отдаёт как 500.

object
Example
{
"code": "embed_packages_not_found",
"message": "Package not found.",
"data": {
"status": 404
}
}

Embed_packages_not_found — нет пакета с этим id; embed_packages_unknown_blog — неизвестный blog_id в сети.

Media typeapplication/json
object
code

Код WP_Error (get_error_code()), например embed_packages_not_found.

string
message

Текст WP_Error (get_error_message()).

string
data

Data WP_Error. Обычно { "status": 404 }. Ошибки ingest/materialize без status WordPress REST отдаёт как 500.

object
Example
{
"code": "embed_packages_not_found",
"message": "Package not found.",
"data": {
"status": 404
}
}

WP_Error ingest без HTTP-status (empty_tree, unsafe_path, disallowed_extension, zip_open, unzip_failed, process_failed, mkdir_failed, write_failed, invalid_file_value, unsafe_zip, missing_zip, invalid_package). WordPress REST отдаёт такие ошибки как 500.

Media typeapplication/json
object
code

Код WP_Error (get_error_code()), например embed_packages_not_found.

string
message

Текст WP_Error (get_error_message()).

string
data

Data WP_Error. Обычно { "status": 404 }. Ошибки ingest/materialize без status WordPress REST отдаёт как 500.

object
Example
{
"code": "embed_packages_not_found",
"message": "Package not found.",
"data": {
"status": 404
}
}