Mengunggah media dengan REST API


9

Saya mengalami masalah saat mengunggah media ke situs WordPress dengan JSON REST API.

Dengan kode berikut ini saya dapat mengunggah foto-foto itu, tetapi tidak ada info yang diberikan kepadanya, bahkan nama - bahkan nama itu secara otomatis menjadi URL dan nama file (tanpa ekstensi).

$username = "ZX";
$password = "ZX";
$host = 'http://ZX.com/wp-json/wp/v2/media';
$data = json_encode($data);
$file = '/Users/xx.png';
$imagedata  = file_get_contents($file);
$process = curl_init($host); 
curl_setopt($process, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($process, CURLOPT_BINARYTRANSFER, TRUE);
curl_setopt($process, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($process, CURLOPT_TIMEOUT, 50);
curl_setopt($process, CURLOPT_USERPWD, $username . ":" . $password);
curl_setopt($process, CURLOPT_POSTFIELDS, $data);
curl_setopt($process, CURLOPT_HTTPHEADER, array('Content-Type:image/png','Content-Disposition:attachment;filename='.$file));
$return = curl_exec($process);
print_r($return);

Bagaimana saya akan menetapkan data, seperti yang berikut, ke unggahan?

$data = array(
  "status" => "draft",
  "title" => "Photo media",       
  "description" => "Photo media1",
  "media_type" => "image",
  "alt_text" => "alternate text"
  );

Jawaban:


3

Ini tidak mungkin melalui API; Anda perlu mengambil gambar sendiri , dan mengirim sendiri data ke API . Blokir

- Ini mengutip Ryan pada masalah GitHub- disebutkan dalam @Dan (dihapus) jawaban.

Cara memuat sisi gambar

Perhatikan bahwa nilai media_sideload_image()balik bisa menjadi turunan \WP_Errorjuga. Maka Anda hanya perlu melampirkannya ke pos, yang cukup sederhana:

$media = media_sideload_image( 
    'http://i.imgur.com/bcJvAj0.jpg', 
    $post->ID, 
    'Some image description', 
    'src'
);

if ( ! empty( $media ) and ! is_wp_error( $media ) ) {
    // reference new image to set as featured
    $attachments = get_posts( [
        'post_type'      => 'attachment',
        'posts_per_page' => 1,
        'post_status'    => 'any',
        'post_parent'    => $post->ID,
    ] );

    if ( is_array( $attachments ) ) {
        set_post_thumbnail( $post->ID, $attachments[0]->ID );
    }

    // Test print our image. The return value is the src of the sideloaded image.
    printf( '<img src="%s" />', $media );
}

Internal

Jejak belakang singkat melalui inti yang menjelaskan mengapa Anda harus tetap menggunakan API:

Lihatlah sumber media_sideload_image()untuk melihatnya menggunakan download_url()internal, yang menggunakan wp_safe_remote_get(), pembungkus untuk \WP_HTTP::get(). Ini berarti ia menawarkan seluruh API WP sementara cukup aman, dapat ditawar-tawar dan mudah digunakan. Nilai pengembalian download_url()adalah hasil dari wp_tempnam(), yang memperhitungkan semua /tmplokasi yang mungkin (ada banyak) dan memastikan lokasi Anda dapat ditulisi . Ini media_handle_sideload()akan menghasilkan semua data lampiran dan meta data yang diperlukan.


Manakah pertanyaan yang dikutip? Apakah metode ini masih valid?
— Brethlosze

Lihat pembaruan dan tautan GitHub – Issue dalam kutipan. Dan mengapa itu tidak valid? Jika Anda ingin memeriksa lagi, cukup ikuti lubang kelinci di sepanjang baris The internal dan bandingkan versi WP-saat ini dengan kode yang tertaut di sini. Itu tidak sulit.
— kaiser

Karena jawaban ini dari 2016. Saya hanya ingin memastikan bahwa pada 2019, REST API tidak dapat menangani mengunggah file ke mediaobjek, maka orang dapat fokus pada fungsi WP.
— Brethlosze

@Brethlosze seperti yang saya katakan: Silakan lihat sendiri sekitar kode inti. Saya tidak punya info baru tentang topik itu karena saya tidak bekerja dengan WP sekarang.
— kaiser
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.