Дублировать сайт (асинхронно)
const url = 'https://example.com/wp-json/wp2/site-duplicator/v1/sites/1/duplicate';const options = { method: 'POST', headers: {'X-WP-Nonce': '<X-WP-Nonce>', 'Content-Type': 'application/json'}, body: '{"title":"example","slug":"example","description":"example","status_id":1,"category_ids":[1]}'};
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/wp2/site-duplicator/v1/sites/1/duplicate \ --header 'Content-Type: application/json' \ --header 'X-WP-Nonce: <X-WP-Nonce>' \ --data '{ "title": "example", "slug": "example", "description": "example", "status_id": 1, "category_ids": [ 1 ] }'Ставит в очередь полное дублирование указанного сайта. Обязательны title и slug. Ответ 202 с идентификатором задания. Пустой сайт этой ручкой не создаётся — для этого POST /sites в Site Manager без source_blog_id.
Authorizations
Заголовок раздела «Authorizations»Parameters
Заголовок раздела «Parameters»Path Parameters
Заголовок раздела «Path Parameters»ID сайта сети. На одиночном сайте можно не передавать.
Request Body
Заголовок раздела «Request Body»object
Заголовок.
Ярлык (сайт, запись, секция).
Поле «description», как принимает или отдаёт PHP.
ID статуса сайта.
Поле «category_ids», как принимает или отдаёт PHP.
Examplegenerated
{ "title": "example", "slug": "example", "description": "example", "status_id": 1, "category_ids": [ 1 ]}Responses
Заголовок раздела «Responses»Задание принято
object
UUID задания (PlatformJob::$job_id). В Site Manager GET отдаёт 404 job_not_found, если тип не начинается с site_manager. или записи нет.
Машинный тип задания. Site Manager: site_manager.create_from_source, site_manager.bulk. Site Duplicator использует свои префиксы того же PlatformJob.
Статус жизненного цикла (pending / running / completed / failed; PHP также может отдать cancelled как терминальный).
Текущая фаза воркера (короткая метка прогресса, например bulk), не HTTP-статус.
Счётчики прогресса (percent / current / total), как сложил воркер в PlatformJob::$progress.
object
Процент выполнения 0–100, если воркер его пишет.
Сколько единиц уже обработано.
Сколько единиц всего (например число blog_ids в bulk).
Человекочитаемый статус воркера (не PIN и не лог WP-CLI).
Кто поставил задание. GET чужого job без manage_network — 403 forbidden. Список jobs отдаёт только задания текущего пользователя.
Сеть, в которой создали задание. Чужая сеть — 404 job_not_in_network (текст «Job not found.»).
Вход воркера (для bulk — blog_ids/action/patch/drop_tables; для create_from_source — source_blog_id и поля нового сайта).
object
Результат после completed (для bulk — succeeded/failed/total/processed). null, пока задание не закончено успешно.
object
Ошибка при failed. PHP кладёт массив {code, message} в PlatformJob::$error; null, если не падало.
Время создания задания (GMT, gmdate('c')).
Время последнего обновления прогресса/статуса.
Время перехода в терминальный статус; null, пока задание идёт.
Example
{ "status": "pending"}Headers
Заголовок раздела «Headers»Не аутентифицирован. WordPress REST: rest_not_logged_in / rest_forbidden. Cookie + X-WP-Nonce или Application Password.
object
Машинный код ошибки или события.
Текст сообщения (лог, PIN, сброс пароля).
Дополнительные данные WP_Error или лицензии.
object
Examplegenerated
{ "code": "example", "message": "example", "data": {}}Нет права или невалидный REST nonce. WordPress REST: rest_forbidden / rest_cookie_invalid_nonce.
object
Машинный код ошибки или события.
Текст сообщения (лог, PIN, сброс пароля).
Дополнительные данные WP_Error или лицензии.
object
Examplegenerated
{ "code": "example", "message": "example", "data": {}}