Preciso da sua ajuda para fazer upload de uma imagem de mídia no meu blog wordpress através da autenticação Wp-rest-api v2 e Oauth2.
Não encontrei na documentação da API REST a maneira de enviar meus dados de imagem (nome do campo, modo de envio ...?).
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>";
A resposta :
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
)
Qualquer ideia? Muito obrigado
;
inwordpress.local/wp-json/wp/v2/media";
é um erro de digitação aqui ou está no seu código real também?source_url
deve estar dentro dopost
objeto.Respostas:
TÃO! Isto é divertido.
Lembre-se de que o WP-API ainda é um trabalho em andamento.
Disposição de conteúdo
Encontrei um problema relatado na fila de problemas do WP-API sobre Content-Disposition. Esse é um cabeçalho necessário para a publicação de novos conteúdos de mídia e existem alguns requisitos muito, muito rigorosos, quando se trata de fornecê-los no formato adequado.
O objetivo da criação de terminal de mídia
Primeiro, vamos dar um passo atrás. A API pressupõe que você já tenha carregado um novo arquivo no diretório correto. Esse ponto de extremidade está criando o conteúdo de mídia no banco de dados que referencia esse arquivo.
A solução
Você deve especificar o nome do arquivo de mídia para associar ao seu novo conteúdo. Este não pode ser um URL remoto. Como você pode ver na documentação da v2 ,
source_url
elink
é somente leitura. Tudo o que você precisa fazer para enviar seu novo conteúdo com sucesso é adicionar o seguinte ao seu cabeçalho:Conforme mencionado no ticket, você não pode adicionar aspas ou especificar o método que está usando para enviar o arquivo. Ele deve estar no formato acima. Pelo menos, é esse o caso até que eles mudem tudo.
Verifique se o tipo de arquivo é um dos tipos de arquivo aceitos e se a extensão do arquivo está incluída na solicitação. Obrigado ao Dr. Deo nos comentários.
Para o registro, eu ri com alegria quando finalmente descobri isso ... assustou muito a minha esposa.
fonte
Content-Disposition
!Sorry, this file type is not permitted for security reasons
curl --request POST --url http://localhost/kayinjaproject/wp-json/wp/v2/media --header "cache-control: no-cache" --header "content-disposition: attachment; filename=tmp.png" --header "authorization: Basic cm9vdDppYW1haGVybw==" --header "content-type: image/png" --data-binary "@c:/gnu/png.png" --location
mas se você omitir opng
nome do arquivotmp.png
, você obtémerror sorry, this file type is not permitted for security reasons
Para fins de "referência cruzada", consulte minha resposta relacionada aqui no StackOverflow sobre upload de mídia e uso dessa mídia como "mídia em destaque" para uma postagem.
fonte