Ajouter un média avec WP-Rest-API v2

10

J'ai besoin de votre aide pour télécharger une image de média dans mon blog wordpress via l'authentification Wp-rest-api v2 et Oauth2.

Je n'ai pas trouvé dans la documentation de l'API REST le moyen d'envoyer mes données d'image (nom du champ, mode d'envoi ...?).

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 réponse:

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
)

Une idée? Merci beaucoup

    
posée kain34440 26.11.2015 - 09:18

2 réponses

7

SO! C'est marrant!

Gardez à l’esprit que l’API-WP est toujours un travail en cours.

Contenu-Disposition

J'ai trouvé un problème signalé dans la file d'attente des problèmes de l'API WP à propos de Content-Disposition. Il s’agit d’un en-tête obligatoire pour l’affichage de nouveaux contenus multimédias. Il existe des exigences très très strictes s’agissant de les fournir au format approprié.

Objectif de la création d'un point de terminaison du média

Premièrement, revenons en arrière. L'API suppose à ce stade que vous avez déjà téléchargé un nouveau fichier dans le bon répertoire. Ce noeud final crée le contenu multimédia dans la base de données qui référence ce fichier.

La solution

Vous devez spécifier le nom du fichier multimédia à associer à votre nouveau contenu. Cela ne peut pas être une URL distante. Comme vous pouvez le voir sur la documentation v2 , source_url et link sont en lecture seule. Pour soumettre correctement votre nouveau contenu, il vous suffit d'ajouter ce qui suit dans votre en-tête:

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

Comme indiqué dans le ticket, vous ne pouvez pas ajouter de guillemets ni spécifier la méthode que vous utilisez pour envoyer le fichier. Il doit être dans le format ci-dessus. Du moins, c'est le cas jusqu'à ce qu'ils le changent complètement.

Pour mémoire, je me suis éclaté de rire quand j'ai enfin compris que celui-ci était… effrayé par ma femme.

    
réponse donnée MikeNGarrett 14.02.2016 - 05:03
2

Par souci de "référencement croisé", consultez mon réponse associée ici sur StackOverflow à propos du téléchargement de média et de l'utilisation de ce média en tant que" média vedette "pour une publication.

    
réponse donnée pHiL 20.07.2016 - 01:01

Lire d'autres questions sur les étiquettes