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 la API REST la forma de enviar los datos de mi 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
;
enwordpress.local/wp-json/wp/v2/media";
una mistype aquí o está en su código real también?source_url
deberías estar dentro delpost
objeto.Respuestas:
¡ENTONCES! Esto es divertido.
Tenga en cuenta que la WP-API sigue siendo un trabajo en progreso.
Disposición de contenido
Encontré un problema informado en la cola de problemas de WP-API sobre Content-Disposition. Este es un encabezado obligatorio para publicar contenido multimedia nuevo y existen algunos requisitos muy estrictos a la hora de proporcionarlo en el formato adecuado.
El propósito de crear punto final de medios
Primero, demos un paso atrás. La API asume en este punto 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 multimedia para asociarlo a su nuevo contenido. Esto no puede ser una url remota. Como se puede ver en la documentación v2 ,
source_url
ylink
son de sólo lectura. Todo lo que tiene que hacer para enviar con éxito su nuevo contenido es agregar lo siguiente a su encabezado:Como se menciona en el ticket, no puede agregar comillas ni especificar el método que está utilizando para enviar el archivo. Se debe estar en el formato anterior. Al menos, este es el caso hasta que lo cambien por completo.
Asegúrese de que el tipo de archivo sea uno de los tipos de archivo aceptados y que incluya la extensión del archivo incluida en la solicitud. Gracias al Dr. Deo en los comentarios.
Para el registro, me reí con alegría vertiginosa cuando finalmente me di cuenta de esto ... asustado de mi esposa.
fuente
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
pero si omite elpng
nombre de archivotmp.png
, obtendráerror sorry, this file type is not permitted for security reasons
En aras de la "referencia cruzada", 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.
fuente