web-dev-qa-db-de.com

Fügen Sie Medien mit WP-Rest-API v2 hinzu

Ich benötige Ihre Hilfe, um ein Medienbild in meinem WordPress-Blog über die Authentifizierung Wp-rest-api v2 und Oauth2 hochzuladen.

Ich habe in der API-Dokumentation REST nicht gefunden, wie ich meine Bilddaten senden kann (Feldname, Sendemodus ...?).

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

Die Antwort :

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
)

Irgendeine Idee? Danke vielmals

10
kain34440

SO! Das macht Spaß.

Denken Sie daran, dass die WP-API noch in Arbeit ist.

Inhaltsdisposition

Ich habe ein Problem, das in der WP-API-Problemwarteschlange gemeldet wurde über Content-Disposition gefunden. Dies ist ein erforderlicher Header für das Posten neuer Medieninhalte, und es gibt einige sehr, sehr strenge Anforderungen, wenn dies im richtigen Format bereitgestellt werden soll.

Der Zweck des Erstellens eines Medienendpunkts

Lassen Sie uns zunächst einen Schritt zurücktreten. Die API geht davon aus, dass Sie zu diesem Zeitpunkt bereits eine neue Datei in das richtige Verzeichnis hochgeladen haben. Dieser Endpunkt erstellt den Medieninhalt in der Datenbank, der auf diese Datei verweist.

Die Lösung

Sie müssen den Dateinamen der Mediendatei angeben, die Ihrem neuen Inhalt zugeordnet werden soll. Dies kann keine Remote-URL sein. Wie Sie der v2-Dokumentation entnehmen können, sind source_url und link schreibgeschützt. Alles, was Sie tun müssen, um Ihren neuen Inhalt erfolgreich zu übermitteln, ist Folgendes zu Ihrer Kopfzeile hinzuzufügen:

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

Wie im Ticket erwähnt, können Sie keine Anführungszeichen hinzufügen oder die Methode angeben, mit der Sie die Datei senden. Es muss im obigen Format sein. Zumindest ist dies der Fall, bis sie alles ändern.

Stellen Sie sicher, dass der Dateityp einer der akzeptierten Dateitypen ist und dass die Erweiterung der Datei in der Anforderung enthalten ist. Vielen Dank an Dr. Deo in den Kommentaren.

Fürs Protokoll, ich lachte vor schwindelerregender Freude, als ich endlich herausfand, dass ... meine Frau zum Teufel erschreckt hat.

8
MikeNGarrett

Weitere Informationen zum Thema "Querverweise" finden Sie in meiner Antwort hier auf StackOverflow zum Hochladen von Medien und zum Verwenden dieser Medien als "empfohlene Medien" für einen Beitrag.

2
pHiL