Secara terprogram, ambil gambar dengan URL dan simpan di folder unggahan

14

Saya terlibat dalam migrasi besar-besaran dari CMS lain ke WordPress. Kami memiliki salinan database dan telah bekerja bagaimana cara mengekstrak konten dan secara terprogram membuat posting WordPress dari itu menggunakan instantiation wpdbkelas.

Namun, ada beberapa ribu gambar yang ingin kami tarik secara otomatis, menghasilkan berbagai ukuran, dan kemudian melampirkan ke posting, untuk menghemat sekitar satu minggu kerja!

Apakah ada cara saya bisa mendapatkan gambar dari situs jarak jauh dengan URL dan menyimpannya di folder wp-unggah saya? Saya kira ini menggunakan wp_httptetapi saya tidak terbiasa dengan itu.

Setelah saya mendapatkan gambar dan menyimpannya, saya baik-baik saja karena saya dapat menggunakannya wp_generate_attachment_metadatauntuk membuat berbagai ukuran dan wp_insert_attachmentmelampirkannya pada sebuah posting.

Terima kasih Simon

Simon Blackbourn
sumber

Jawaban:

29

Sebenarnya ada fungsi hebat yang akan melakukan ketiga hal itu untuk Anda:

media_sideload_image( $url, $post_id, $description );

Argumen pertama adalah url jarak jauh dari gambar yang ingin Anda unduh. Argumen kedua adalah id posting dari posting yang ingin Anda lampirkan gambar. Argumen ketiga adalah opsional, tetapi akan menjadi deskripsi jika disertakan.

Saya sarankan mencari cara untuk membatasi unduhan agar Anda tidak terus menghitung waktu, seperti membatasi jumlah gambar yang diambil per load dan mengatur importir untuk menyegarkan diri di antara unduhan, atau menggunakan AJAX untuk melakukannya satu pada suatu waktu secara tidak sinkron.

John P Bloch
sumber
1
itu benar-benar fantastis john, terima kasih banyak - ini berfungsi dengan baik. pelambatan ini tidak menjadi masalah karena saya telah mengaturnya untuk menunggu penekanan tombol setelah setiap impor posting memberi kami kesempatan untuk memeriksa detailnya secara manual dan mencatat yang bermasalah.
Simon Blackbourn
1
hanya karena saya memerlukan ID lampiran untuk terhubung ke pos lain, berikut adalah cara yang baik untuk melakukannya
axel
3

Jawaban John benar: menggunakan media_sideload_image , perlu diketahui bahwa Anda mungkin perlu skrip ini sebelumnya jika Anda tidak melakukan ini dalam konteks WP Admin:

require_once(ABSPATH . 'wp-admin/includes/media.php');
require_once(ABSPATH . 'wp-admin/includes/file.php');
require_once(ABSPATH . 'wp-admin/includes/image.php');

Lihat https://codex.wordpress.org/Function_Reference/media_sideload_image#Notes

bryceadams
sumber