Saya ingin menawarkan kepada pengunjung saya opsi untuk mengunduh seluruh galeri foto (ditampilkan pada halaman [galeri] khusus) sebagai file ZIP yang ditampilkan di bagian bawah setiap halaman galeri. - Gambar berukuran penuh harus dimasukkan.
David Walsh telah memberikan beberapa kode dalam postingannya di sini untuk mem-zip file tetapi saya mengalami kesulitan mengintegrasikannya dengan fungsi Wordpress.
Saya sadar ada plugin unduhan galeri NextGEN tapi saya tidak dalam posisi untuk menggunakannya karena saya menggunakan fungsi galeri wordpress asli.
Pertanyaan serupa dengan alternatif (metode manual) untuk menyelesaikan hal di atas dapat ditemukan di sini: Plugin untuk mengunduh file media terlampir?
Bantuan apa pun akan sangat dihargai. Terima kasih.
Jawaban:
Pertama, Anda harus mendapatkan gambar. Cara mendapatkan semua gambar galeri dijelaskan di sini .
WordPress menggunakan dua kelas untuk membuka ritsleting file. PHP bilt in
ZipArchive()
(penggunaan lihat David Walsh). Dan PclZip , Anda dapat menemukan kelas ini diwp-admin/includes/class-pclzip.php
. Jika Anda punya masalah denganZipArchive()
mencoba kelas PclZip.Sekarang Anda hanya harus menempelkan keduanya. Mungkin saya dapat memposting beberapa kode sampel nanti, saat ini saya tidak di meja saya.
Memperbarui
Pertanyaan Anda dapat dibagi menjadi dua bagian. Yang pertama adalah mendapatkan semua gambar dari galeri. Yang kedua adalah zip gambar dan mengirim file zip.
Saya hanya akan menjelaskan bagian pertama, mendapatkan semua gambar dari galeri, karena ripping file agak offtopic.
Mungkin ada solusi lain, tetapi dalam contoh ini saya mengganti shortcode galeri asli dengan yang kustom untuk mendapatkan gambar. Alasannya, WordPress mengubah galeri di v3.5 sedikit.
Sebelum 3.5, gambar untuk galeri adalah lampiran posting. Setelah 3.5, gambar dilewatkan ke kode pendek sebagai atribut. Karena WP3.5 kita tidak bisa lagi mendapatkan gambar lampiran dari sebuah posting, kita harus mengambil daftar dari atribut shortcode. Strategi saya adalah mengganti kode pendek asli dengan kode pendek khusus, ambil atribut dan panggil kode pendek asli untuk mendapatkan output galeri.
Semua hal yang berhubungan dengan galeri berada dalam kelas. Untuk membuat file zip, kita bisa menggunakan kelas lain yang mengambil input dari kelas galeri. Mari kita mulai dengan kelas dan konstruktor sederhana.
Kami akan memanggil metode
get_instance()
nanti di plugin dengan hookplugins_loaded
. Di konstruktor, kami menghapus kode pendek asli dan menggantinya dengan kode pendek khusus kamigallery_zip_shortcode()
. Sekarang kita membutuhkan panggilan balik kode pendekHal pertama dalam metode ini adalah mendapatkan posting karena kita membutuhkan ID posting. Selain kami sertakan
wp-includes/media.php
, file ini berisi fungsi panggilan balik untuk kode singkat galeri asli. Sekarang kita memanggil metode untuk mendapatkan array dengan semua gambar, membuat output galeri dengan memanggil callback galeri asli, membuat tautan dan menambahkan tautan ke output galeri. Gambar itu sendiri, masing-masing jalur ke gambar, disimpan dalam variabel kelas$images
, kita perlu array ini nanti.Variabel kelas
$image
menyimpan entri untuk setiap posting dengan galeri, sehingga kita dapat menggunakan fungsi baik di halaman depan atau dalam tampilan tunggal. Setiap entri berisi larik untuk setiap galeri, karena mungkin ada lebih dari satu galeri di setiap kiriman.Inti dari plugin adalah metode untuk mendapatkan gambar dari kode pendek.
Pada awalnya kami memutuskan apakah itu satu posting atau daftar ID posting. Jika ini adalah daftar ID kiriman, kami menangani galeri dari WP3.5 +. Setelah itu, kita harus menangani
exclude
atributnya. Setelah mengatur semua variabel, kami akhirnya bisa mendapatkan gambar dari galeri. Gambar yang diambil akan didorong ke kelas var$images
untuk digunakan nanti.Ini adalah emas dari plugin. Cukup siapkan array dengan argumen kueri, dapatkan lampirannya
get_posts()
dan berjalan di atas lampiran yang diambil. Untuk menangani ukuran yang berbeda, kami mendapatkan gambar lampiran dan strip url. Dari file terlampir, kami mengambil path dan menggabungkannya dengan nama file. Dalam array$images
sekarang semua gambar dan jalurnya dari galeri.Pada dasarnya pertanyaan Anda dijawab pada saat ini. Tetapi Anda juga ingin membuat file zip dari gambar. Anda bisa membuat file zip dari array
$images
di metode terakhir. Tetapi metode ini disebut setiap kali galeri ditampilkan dan membuat file zip bisa memakan waktu cukup lama. Mungkin tidak ada yang akan meminta file zip yang Anda buat di sini, ini adalah pemborosan sumber daya.Bagaimana kita bisa melakukannya dengan lebih baik? Apakah Anda ingat bahwa saya meletakkan semua gambar dalam variabel kelas
$images
? Kita bisa menggunakan var kelas ini untuk permintaan ajax. Tetapi permintaan ajax hanyalah pemuatan halaman lain dan kita hanya dapat mengakses gambar ketika output galeri dibuat. Kita harus menyimpan gambar kita di tempat di mana kita dapat mengaksesnya bahkan setelah permintaan halaman lain.Dalam contoh ini saya menggunakan variabel sesi untuk menyimpan array dengan gambar. Variabel sesi dapat diakses bahkan setelah halaman lain dimuat ulang. Untuk menyimpan gambar, saya mendaftarkan metode dengan
shutdown
hook. Setelah WordPress selesai merender halaman,shutdown
hook akan dipanggil. Pada titik ini, kita seharusnya sudah mengumpulkan semua gambar dari semua galeri yang ditampilkan. Kami hanya menyimpan gambar dan dapat mengaksesnya dalam permintaan ajax.Ketika permintaan ajax dipicu, kami mengingat sesi var dan membuat file zip dari data. Tapi ini agak aneh untuk pertanyaan ini.
Saya membuat repositori di GitHub dengan kode plugin lengkap. Saya harap ini menunjukkan Anda ke arah yang benar.
sumber
Saya menyukai gagasan plugin Ralf untuk dapat mengunduh seluruh galeri dalam sekali jalan, tetapi saya belum dapat membuatnya berfungsi. Saya telah menemukan solusi yang berfungsi untuk tujuan kita. Metode ini adalah mengganti galeri WP asli dengan galeri Anda sendiri yang Anda tempatkan di akhir
functions.php
file tema Anda DAN tambahkan file berikut ini, beri namadownload.php
ke dalam folder tema aktif. Di galeri khusus, tautan di bawah file tersebut memanggil file download.php yang secara otomatis memaksa unduhan file Anda ke hard drive. Saya telah menguji ini pada versi Chrome, Firefox dan Safari terbaru dan berfungsi dengan baik. Telah menggunakan tema Twenty Twelve, tetapi tidak ada alasan mengapa itu tidak bisa bekerja pada yang lain juga.a) Tambahkan berikut ini ke akhir
functions.php
. Ini hanya diambil dari media.phpb) Salin dan tempel yang berikut ke dalam file yang disebut
download.php
di direktori dasar tema.c). Jangan lupa untuk menautkan ke file di galeri !! Penting!
sumber