Частично обновить метаданные сайта
const url = 'https://example.com/wp-json/wp2/site-manager/v1/sites/1';const options = { method: 'PATCH', headers: {'X-WP-Nonce': '<X-WP-Nonce>', 'Content-Type': 'application/json'}, body: '{"title":"Учебный проект","status_id":12,"category_ids":[3]}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request PATCH \ --url https://example.com/wp-json/wp2/site-manager/v1/sites/1 \ --header 'Content-Type: application/json' \ --header 'X-WP-Nonce: <X-WP-Nonce>' \ --data '{ "title": "Учебный проект", "status_id": 12, "category_ids": [ 3 ] }'Частичный PATCH: меняются только переданные ключи (title/slug/description/status_id/category_ids/archived/public/is_template). Контент сайта не копируется.
Смена slug главного сайта — 403 main_site_slug_forbidden. archive/public на главном сайте — 403 main_site_forbidden. Занятый адрес — 409 slug_conflict.
Authorizations
Заголовок раздела «Authorizations»Parameters
Заголовок раздела «Parameters»Path Parameters
Заголовок раздела «Path Parameters»ID сайта в текущей сети (WP_Site->blog_id). Сайт из другой сети — 404 site_not_in_network.
Request Body
Заголовок раздела «Request Body»object
Новый blogname. Необязательно; отсутствие ключа — не менять. PHP делает sanitize_text_field и пишет опцию блога плюс site meta blogname.
Новый адресный ярлык. Необязательно. PHP нормализует и через domain_exists проверяет занятость; чужой сайт с тем же domain+path — 409 slug_conflict. Главный сайт сети — 403 main_site_slug_forbidden.
Новый blogdescription. Необязательно; PHP пишет sanitize_text_field в опцию блога.
ID статуса Site Manager или null, чтобы снять статус. Ключ должен быть передан (array_key_exists): иначе PHP статус не трогает. Несуществующий термин — 400 invalid_term.
Полный набор ID категорий сайта. Если ключ передан (даже пустой массив) — PHP перезаписывает meta. Каждый id должен быть термином категорий; иначе 400 invalid_term.
True — update_blog_status(..., archived, 1); false — снять архив. Главный сайт — 403 main_site_forbidden. Не путать с integer-флагом в SiteDto.
1 — активировать сайт (WP_Site->public=1); иначе деактивировать (0). Главный сайт — 403 main_site_forbidden.
Пишет site meta wp2platform_site_manager_is_template (1 или 0). Нужен ключ в JSON, иначе PHP флаг не меняет.
Example
{ "title": "Учебный проект", "status_id": 12, "category_ids": [ 3 ]}Responses
Заголовок раздела «Responses»Сайт после применения патча (SiteMetadata::to_array).
object
ID сайта в текущей сети (WP_Site->blog_id). Path {blog_id} тех же ручек — то же число.
ID сети, которой принадлежит сайт (WP_Site->site_id). Это не blog_id и не CreateNetworkRequest.domain.
Заголовок сайта — опция блога blogname (get_option на этом сайте). Не опция сети site_name.
Адресный ярлык сайта. При SUBDOMAIN_INSTALL — поддомен относительно domain сети; иначе сегмент WP_Site->path без слэшей. PHP считает его в SiteSlugService::derive_slug_from_site.
Хост сайта в таблице блогов (WP_Site->domain), без схемы https://.
Путь сайта в таблице блогов (WP_Site->path) со слэшами (часто / при поддоменах или /training/ при subdirectory). Это не путь файла Local Sync.
Подзаголовок сайта — опция блога blogdescription.
ID термина таксономии статусов Site Manager (site meta wp2platform_site_status). null, если статус не задан или id=0.
Развёрнутый термин статуса Site Manager. null, если статус не задан. Не путать с флагом WP_Site->public.
object
Term_id статуса.
Отображаемое имя статуса.
Ярлык термина статуса (sanitize_title).
ID терминов категорий Site Manager (site meta wp2platform_site_categories).
Развёрнутые категории сайта (id, name, slug). Во вложении SiteDto PHP не отдаёт parent.
object
Term_id категории сайтов (таксономия Site Manager, не рубрика записей).
Отображаемое имя термина. В списке PHP может подменить дефолтные ярлыки через translate_default_term_label.
Ярлык термина категории (sanitize_title при записи).
Term_id родителя (WP_Term->parent); 0 — корень. В SiteDto.categories PHP это поле не кладёт.
Публичный URL сайта (get_site_url(blog_id)).
URL wp-admin этого сайта (get_admin_url(blog_id)), не /wp-admin/network/.
Дата регистрации блога (WP_Site->registered), как хранит ядро.
Дата последнего обновления блога (WP_Site->last_updated).
Флаг WP_Site->public (1 — публичный/активный, 0 — снят с публикации). Не термин статуса Site Manager.
Флаг WP_Site->archived (1 — в архиве, 0 — нет).
Флаг WP_Site->deleted в таблице блогов (ядро пометило сайт удалённым). Не результат DELETE этой API.
Флаг WP_Site->spam (1 — помечен как спам).
Флаг WP_Site->mature.
True, если это главный сайт сети (is_main_site(blog_id)). Его нельзя удалить, архивировать, деактивировать или сменить ему slug через API (main_site_forbidden / main_site_slug_forbidden).
True, если site meta wp2platform_site_manager_is_template равно 1 (сайт-шаблон для дублирования).
Число пользователей на сайте (count_users()['total_users']). PHP добавляет поле, только если в query include есть подстрока stats; иначе ключа нет.
Example
{ "blog_id": 5, "network_id": 1, "title": "Учебный проект", "slug": "training", "domain": "training.example.com", "path": "/", "description": "Песочница для курса", "status_id": 12, "status": { "id": 12, "name": "В работе", "slug": "in-progress" }, "category_ids": [ 3 ], "categories": [ { "id": 3, "name": "Учебные проекты", "slug": "training", "parent": 0 } ], "site_url": "https://training.example.com/", "admin_url": "https://training.example.com/wp-admin/", "registered": "2024-03-01 10:15:00", "last_updated": "2026-09-12 18:40:11", "public": 1, "archived": 0, "deleted": 0, "spam": 0, "mature": 0, "is_main_site": false, "is_template": false, "user_count": 4}Invalid_term — неизвестный статус/категория; invalid_network — не удалось собрать domain/path.
object
Машинный код ошибки или события.
Текст сообщения (лог, PIN, сброс пароля).
Дополнительные данные WP_Error или лицензии.
object
Examplegenerated
{ "code": "example", "message": "example", "data": {}}Не аутентифицирован. DualRest: rest_forbidden (status 401), если нет cookie-сессии. Cookie + X-WP-Nonce или Application Password.
object
Машинный код ошибки или события.
Текст сообщения (лог, PIN, сброс пароля).
Дополнительные данные WP_Error или лицензии.
object
Examplegenerated
{ "code": "example", "message": "example", "data": {}}Forbidden (нет права на блог), main_site_slug_forbidden, main_site_forbidden, или невалидный REST nonce.
object
Машинный код ошибки или события.
Текст сообщения (лог, PIN, сброс пароля).
Дополнительные данные WP_Error или лицензии.
object
Examplegenerated
{ "code": "example", "message": "example", "data": {}}Site_not_in_network / site_not_found.
object
Машинный код ошибки или события.
Текст сообщения (лог, PIN, сброс пароля).
Дополнительные данные WP_Error или лицензии.
object
Examplegenerated
{ "code": "example", "message": "example", "data": {}}Slug_conflict — этот slug уже занят другим сайтом сети.
object
Машинный код ошибки или события.
Текст сообщения (лог, PIN, сброс пароля).
Дополнительные данные WP_Error или лицензии.
object
Examplegenerated
{ "code": "example", "message": "example", "data": {}}