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"
  );
Diario de Morelia
sumber

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.

kaisar
sumber
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