Saya telah menambahkan halaman baru di bawah "Halaman" di admin wordpress, dan menambahkan beberapa bidang khusus. Saya juga ingin dapat menambahkan bidang gambar unggahan ke editor halaman - apakah ada cara untuk melakukan ini melalui bidang khusus?
Atau ada arah berbeda yang harus saya ambil jika saya membutuhkan kemampuan ini?
Jawaban:
Bagi siapa saja yang ingin tahu lebih banyak tentang mengunggah file, inilah primer cepat yang mencakup topik-topik utama dan poin-poin menyakitkan. Ini ditulis dengan WordPress 3.0 pada kotak Linux dalam pikiran, dan kode hanyalah gambaran dasar untuk mengajarkan konsep. Saya yakin beberapa orang di sini dapat menawarkan saran untuk perbaikan implementasi.
Uraikan Pendekatan Dasar Anda
Setidaknya ada tiga cara untuk mengaitkan gambar dengan posting: menggunakan bidang post_meta untuk menyimpan jalur gambar, menggunakan bidang post_meta untuk menyimpan ID perpustakaan media gambar (lebih lanjut tentang itu nanti), atau menetapkan gambar ke posting sebagai lampiran . Contoh ini akan menggunakan bidang post_meta untuk menyimpan ID pustaka media gambar. YMMV.
Pengodean Multipart
Secara default, buat & edit formulir WordPress tidak memiliki enctype. Jika Anda ingin mengunggah file, Anda perlu menambahkan "enctype = 'multipart / form-data'" ke tag form - jika tidak, koleksi $ _FILES tidak akan bisa didorong sama sekali. Di WordPress 3.0, ada kaitannya dengan itu. Dalam beberapa versi sebelumnya (tidak yakin dengan spesifik) Anda harus mengganti tag form.
Buat Kotak Meta dan Unggah Bidang
Saya tidak akan terlalu jauh membuat kotak meta karena sebagian besar dari Anda mungkin sudah tahu cara melakukannya, tetapi saya hanya akan mengatakan bahwa Anda hanya perlu kotak meta sederhana dengan bidang file di dalamnya. Dalam contoh di bawah ini saya telah memasukkan beberapa kode untuk mencari gambar yang ada, dan menampilkannya jika ada. Saya juga menyertakan beberapa fungsi kesalahan / umpan balik sederhana yang melewati kesalahan menggunakan bidang post_meta. Anda ingin mengubahnya untuk menggunakan kelas WP_Error ... itu hanya untuk demonstrasi.
Menangani File Upload
Ini yang besar - sebenarnya menangani unggahan file dengan mengaitkan ke tindakan save_post. Saya telah menyertakan fungsi yang sangat banyak dikomentari di bawah ini, tetapi saya ingin mencatat dua fungsi utama WordPress yang digunakannya:
wp_handle_upload () melakukan semua keajaiban, baik, menangani unggahan. Anda hanya memberikan referensi ke bidang Anda dalam array $ _FILES, dan array opsi (jangan terlalu khawatir tentang hal ini - satu-satunya hal penting yang perlu Anda atur adalah test_form = false. Percayalah pada saya). Namun, fungsi ini tidak menambahkan file yang diunggah ke perpustakaan media. Itu hanya mengunggah dan mengembalikan jalur file baru (dan, mudahnya, URL lengkap juga). Jika ada masalah, itu mengembalikan kesalahan.
wp_insert_attachment () menambahkan gambar ke perpustakaan media, dan menghasilkan semua thumbnail yang sesuai. Anda cukup memberikan array opsi (judul, status posting, dll), dan jalur LOCAL (bukan URL) ke file yang baru saja Anda unggah. Hal yang hebat tentang menempatkan gambar Anda di perpustakaan media adalah bahwa Anda dapat dengan mudah menghapus semua file nanti dengan memanggil wp_delete_attachment dan meneruskannya dengan ID perpustakaan media item tersebut (yang saya lakukan dalam fungsi di bawah). Dengan fungsi ini, Anda juga harus menggunakan wp_generate_attachment_metadata () dan wp_update_attachment_metadata (), yang melakukan apa yang Anda harapkan - menghasilkan metadata untuk item media.
Izin, Kepemilikan dan Keamanan
Jika Anda mengalami kesulitan mengunggah, itu mungkin ada hubungannya dengan izin. Saya bukan ahli konfigurasi server, jadi tolong perbaiki saya jika bagian ini miring.
Pertama, pastikan folder wp-content / unggah Anda ada, dan dimiliki oleh apache: apache. Jika demikian, Anda harus dapat mengatur izin ke 744 dan semuanya seharusnya berfungsi. Kepemilikan itu penting - bahkan menyetel izin ke 777 terkadang tidak akan membantu jika direktori tidak dimiliki dengan benar.
Anda juga harus mempertimbangkan membatasi jenis file yang diunggah dan dieksekusi menggunakan file htaccess. Ini mencegah orang dari mengunggah file yang bukan gambar, dan dari mengeksekusi skrip yang disamarkan sebagai gambar. Anda mungkin harus Google ini untuk info yang lebih otoritatif, tetapi Anda dapat melakukan pembatasan jenis file sederhana seperti ini:
sumber
if ( ! function_exists( 'wp_handle_upload' ) ) require_once( ABSPATH . 'wp-admin/includes/file.php' );
Kode yang disediakan @MathSmath benar. Namun, jika Anda menangani banyak bidang unggahan, atau ingin mengunggah banyak file, maka Anda harus banyak memodifikasinya.
Selain itu, ia tidak menggunakan perpustakaan media WordPress untuk mengunggah file (yang melakukan semua pekerjaan kotor di belakang layar).
Saya sarankan Anda melihat sebuah plugin seperti Meta Box . Plugin mendukung kedua cara untuk mengunggah file:
input[type="file"]
, yang menggunakan kode serupa di atas (lihat dokumen ) danIni dapat membantu Anda mengurangi upaya penulisan dan pemeliharaan kode, terutama ketika Anda ingin membuat banyak unggahan.
Penafian: Saya penulis Meta Box.
sumber