Добавление мультимедиа с помощью WP-Rest-API v2
Мне нужна ваша помощь, чтобы загрузить медиа-изображение в мой блог WordPress с помощью аутентификации Wp-rest-api v2 и Oauth2.
Я не нашел в документации REST API способа отправки данных моего изображения (имя поля, режим отправки...?).
require('OAuth2/Client.php');
require('OAuth2/GrantType/IGrantType.php');
require('OAuth2/GrantType/AuthorizationCode.php');
const CLIENT_ID = 'XXX';
const CLIENT_SECRET = 'XX';
const REDIRECT_URI = 'http://127.0.0.1/test_api_wp/test.php';
const AUTHORIZATION_ENDPOINT = 'http://wordpress.local/oauth/authorize';
const TOKEN_ENDPOINT = 'http://wordpress.local/oauth/token';
$client = new OAuth2\Client(CLIENT_ID, CLIENT_SECRET);
if (!isset($_GET['code']))
{
$auth_url = $client->getAuthenticationUrl(AUTHORIZATION_ENDPOINT, REDIRECT_URI);
header('Location: ' . $auth_url);
die('Redirect');
}
else
{
$params = array('code' => $_GET['code'], 'redirect_uri' => REDIRECT_URI);
$response = $client->getAccessToken(TOKEN_ENDPOINT, 'authorization_code', $params); //authorization_code
$token = $response['result']['access_token'];
$client->setAccessToken($token);
$client->setAccessTokenType(OAuth2\Client::ACCESS_TOKEN_BEARER);
}
$values = array(
"date" => "2015-11-26 10:00:00",
"date_gmt" => "2015-11-26 09:00:00",
"modified" => "2015-11-26 10:00:00",
"modified_gmt" => "2015-11-26 09:00:00",
"status" => "future",
"title" => "Titre media",
"description" => "description media",
"media_type" => "image",
"source_url" => "https://www.base64-image.de/build/img/mr-base64-482fa1f767.png"
);
$data = $client->fetch("wordpress.local/wp-json/wp/v2/media", $values, "POST");
echo "<pre>";print_r($data);echo "</pre>";
Ответ:
Array
(
[result] => Array
(
[code] => rest_upload_no_data
[message] => No data supplied
[data] => Array
(
[status] => 400
)
)
[code] => 400
[content_type] => application/json; charset=UTF-8
)
Есть идеи? Большое спасибо
2 answers
ИТАК! Это весело.
Имейте в виду, что WP-API все еще находится в стадии разработки.
Содержание-Расположение
Я нашел проблему, о которой сообщалось в очереди вопросов WP-API о размещении контента. Это обязательный заголовок для публикации нового медиаконтента, и существуют некоторые очень, очень строгие требования, когда дело доходит до предоставления этого в надлежащем формате.
Цель создания конечной точки мультимедиа
Во-первых, давайте сделаем шаг назад. То API предполагает, что на этом этапе вы уже загрузили новый файл в правильный каталог. Эта конечная точка создает мультимедийный контент в базе данных, которая ссылается на этот файл.
Решение
Вам необходимо указать имя файла мультимедиа, чтобы связать его с вашим новым контентом. Это не может быть удаленный URL-адрес. Как вы можете видеть из документации v2, source_url
и link
доступны только для чтения. Все, что вам нужно сделать, чтобы успешно отправить свой новый контент, это добавить следующее в свой заголовок:
'Content-Disposition' => 'filename=name-of-file.jpg',
Как указано в билете, вы не можете добавлять кавычки или указывать метод, который вы используете для отправки файла. Он должен быть в формате, указанном выше. По крайней мере, так будет до тех пор, пока они все не изменят.
Убедитесь, что тип файла является одним из принятых типов файлов , и вы включаете расширение файла в запрос. Спасибо доктору Део в комментариях.
Для протокола, я смеялся с головокружительной радостью, когда я наконец-то разобрался в этом... до чертиков напугал свою жену.
Для "перекрестных ссылок" см. Мой ответ, связанный с , здесь на StackOverflow о загрузке мультимедиа и использовании этого носителя в качестве "рекомендуемого носителя" для публикации.