Saya butuh bantuan Anda untuk mengunggah gambar media di blog wordpress saya melalui otentikasi Wp-rest-api v2 dan Oauth2.
Saya tidak menemukan dalam dokumentasi REST API cara mengirim data gambar saya (nama bidang, mode pengiriman ...?).
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>";
Responnya :
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
)
Ada ide? Terima kasih banyak
;
dalamwordpress.local/wp-json/wp/v2/media";
adalah salah ketik di sini atau itu adalah dalam kode nyata Anda juga?source_url
harus berada di dalampost
objek.Jawaban:
BEGITU! Ini menyenangkan.
Perlu diingat WP-API masih sangat, sangat banyak dalam proses.
Konten-Disposisi
Saya menemukan masalah yang dilaporkan pada antrian masalah WP-API tentang Content-Disposition. Ini adalah tajuk yang diperlukan untuk memposting konten media baru dan ada beberapa persyaratan yang sangat, sangat ketat ketika harus menyediakan ini dalam format yang tepat.
Tujuan Membuat Media Endpoint
Pertama, Mari kita mundur selangkah. API mengasumsikan pada titik ini Anda telah mengunggah file baru ke direktori yang benar. Titik akhir ini membuat konten media dalam database yang mereferensikan file ini.
Solusinya
Anda harus menentukan nama file file media untuk dikaitkan dengan konten baru Anda. Ini bukan url jarak jauh. Seperti yang Anda lihat dari dokumentasi v2 ,
source_url
danlink
hanya-baca. Yang harus Anda lakukan agar berhasil mengirimkan konten baru adalah menambahkan yang berikut ke tajuk Anda:Seperti yang disebutkan dalam tiket, Anda tidak dapat menambahkan kutipan atau menentukan metode yang Anda gunakan untuk mengirim file. Itu harus dalam format di atas. Setidaknya, inilah masalahnya sampai mereka mengubahnya di sekitar.
Pastikan jenis file adalah salah satu jenis file yang diterima dan Anda termasuk ekstensi file yang termasuk dalam permintaan. Terima kasih kepada Dr Deo dalam komentarnya.
Sebagai catatan, saya tertawa kegirangan ketika akhirnya saya menemukan yang ini ... menakuti istri saya.
sumber
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
tetapi jika Anda menghilangkanpng
dari nama filetmp.png
, Anda dapaterror sorry, this file type is not permitted for security reasons
Demi "referensi silang", lihat jawaban terkait saya di sini di StackOverflow tentang unggahan media dan menggunakan media itu sebagai "media unggulan" untuk pos.
sumber