Agregar medios con WP-Rest-API v2

10

Necesito su ayuda para cargar una imagen multimedia en mi blog de wordpress a través de la autenticación Wp-rest-api v2 y Oauth2.

No encontré en la documentación de REST API la forma de enviar mis datos de imagen (nombre del campo, modo de envío ...).

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>";

La respuesta:

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
)

¿Alguna idea? Muchas gracias

    
pregunta kain34440 26.11.2015 - 09:18

2 respuestas

7

SO! Esto es divertido.

Tenga en cuenta que WP-API es todavía un trabajo en progreso.

Disposición de contenido

Encontré un problema reportado en la cola de problemas de WP-API sobre Content-Disposition. Este es un encabezado requerido para publicar nuevo contenido de medios y hay algunos requisitos muy estrictos a la hora de proporcionar esto en el formato adecuado.

El propósito de crear un punto final de medios

Primero, retrocedamos un paso. En este punto, la API supone que ya ha cargado un nuevo archivo en el directorio correcto. Este punto final está creando el contenido multimedia en la base de datos que hace referencia a este archivo.

La solución

Debe especificar el nombre de archivo del archivo de medios para asociarlo a su nuevo contenido. Esto no puede ser una url remota. Como puede ver en la documentación de v2 , source_url y link son de solo lectura. Todo lo que debe hacer para enviar su nuevo contenido correctamente es agregar lo siguiente a su encabezado:

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

Como se menciona en el ticket, no puede agregar comillas ni especificar el método que está usando para enviar el archivo. Debe debe estar en el formato anterior. Al menos, este es el caso hasta que lo cambian todo.

Para que conste en acta, me reí con una alegría vertiginosa cuando finalmente descubrí esto ... asusté a mi esposa.

    
respondido por el MikeNGarrett 14.02.2016 - 05:03
2

Por el bien de las "referencias cruzadas", vea mi respuesta relacionada aquí en StackOverflow sobre la carga de medios y el uso de esos medios como" medios destacados "para una publicación.

    
respondido por el pHiL 20.07.2016 - 01:01

Lea otras preguntas en las etiquetas