Создать запись с помощью wordpress REST api

Для начал советую ознакомиться с документацией 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, скачать

Рекомендуем к прочтению



Оставить комментарий

Этот сайт защищен reCAPTCHA и применяются Политика конфиденциальности и Условия обслуживания применять.

Срок проверки reCAPTCHA истек. Перезагрузите страницу.