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
SO! Das macht Spaß.
Denken Sie daran, dass die WP-API noch in Arbeit ist.
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.
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.
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.
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.