Для начал советую ознакомиться с документацией https://developer.wordpress.org/rest-api/
Для отправки запросов использовал Http библиотеку https://github.com/guzzle/guzzle/
не забудьте добавить ее к себе в проект:
composer require guzzlehttp/guzzle
Код создания записи:
<?php
/**
* @return int
*/
function createPost()
{
$imageSrc = '/var/www/default.png';// укажите локальный файл или урл
$postData = [
'title' => 'Заголовок новой записи',
'content' => 'Контентент новой запис созданной по апи',
'status' => 'publish',//future, draft, pending, private
'featured_media' => createMedia($imageSrc),
'categories' => [1, 2],
'meta' => [
'content_source' => 'WordPress rest api tutorial',// если надо заполнить кастомной поле с именем content_source
]
];
$requestData = [
'json' => $postData,
];
return sendPostRequest( 'https://thisis-blog.ru/wp-json/wp/v2/posts', $requestData);//замените домен на свой
}
/**
* @param string $src
* @return int
*/
function createMedia(string $src): int
{
//do not make request if path of media empty
if (empty($src)) {
throw new RuntimeException('Empty argument');
}
$data = [
'body' => file_get_contents($src),
'headers' => [
'cache-control' => 'no-cache',
'content-disposition' => 'attachment; filename=' . basename($src),
'content-type' => 'image/png',
]
];
return sendPostRequest('https://thisis-blog.ru/wp-json/wp/v2/media', $data);//замените домен на свой
}
/**
* @param string $url
* @param array $data
* @return int id of created entity
* @throws Exception
*/
function sendPostRequest(string $url, array $data): int
{
$data = array_merge($data, ['auth' => ['userLogin', 'userPassword']]);// здесь нужно заменить данные на ваш логи и пароль
$client = new \GuzzleHttp\Client();
$res = $client->post($url, $data);
if ($res->getStatusCode() !== 201) { // created
throw new RuntimeException(var_export($res, true));
}
//getting id from response
return \GuzzleHttp\json_decode($res->getBody()->getContents())->id;
}
Подготовил коллекцию для Postman, скачать
Оставить комментарий