Adicione mídia com o WP-Rest-API v2

10

Preciso da sua ajuda para enviar uma imagem de mídia no meu blog do wordpress por meio 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
)

Alguma ideia? Muito obrigado

    
por kain34440 26.11.2015 / 09:18

2 respostas

7

SO! Isto é divertido.

Tenha em mente que o WP-API ainda é um trabalho muito em andamento.

Disposição de Conteúdo

Encontrei um problema relatado na fila de problemas do WP-API sobre o Content-Disposition. Este é um cabeçalho obrigatório para postar novos conteúdos de mídia e há alguns requisitos muito, muito rigorosos quando se trata de fornecer isso no formato adequado.

O objetivo de criar um ponto de extremidade de mídia

Primeiro, vamos dar um passo atrás. A API assume neste momento que você já fez o upload de um novo arquivo para o diretório correto. Este nó de extremidade está criando o conteúdo de mídia no banco de dados que faz referência a esse arquivo.

A solução

Você precisa especificar o nome do arquivo de mídia a ser associado ao seu novo conteúdo. Este não pode ser um URL remoto. Como você pode ver na documentação da v2 , source_url e link são somente leitura. Tudo o que você precisa fazer para enviar com sucesso seu novo conteúdo é adicionar o seguinte ao seu cabeçalho:

'Content-Disposition' => 'filename=name-of-file.jpg',

Como mencionado no ticket, você não pode adicionar cotações ou especificar o método que está usando para enviar o arquivo. deve estar no formato acima. Pelo menos, esse é o caso até que eles mudem tudo.

Para o registro, eu ri com alegria vertiginosa quando eu finalmente percebi isso ... assustou o inferno fora da minha esposa.

    
por MikeNGarrett 14.02.2016 / 05:03
2

Para obter uma "referência cruzada", consulte minha respostas relacionadas aqui no StackOverflow sobre o upload de mídia e o uso dessa mídia como" mídia em destaque "para uma postagem.

    
por pHiL 20.07.2016 / 01:01

Tags