Tolak unggahan gambar berukuran salah menggunakan Pengunggah Media


12

Saya sedang mengerjakan pengaturan super-ketat untuk menambahkan gambar ke Bidang Kustom di layar Edit Posting. Skenario optimal saya adalah menambahkan pesan Kesalahan Khusus ketika pengguna mencoba mengunggah gambar dengan ukuran yang salah untuk nilai khusus tersebut.

Saya sadar saya bisa melakukan ini dengan pengunggah kustom apa pun, tetapi saya benar-benar lebih suka melakukannya dengan Pengunggah Media biasa. Saya juga mengetahui wp_handle_upload_prefilter yang sudah saya gunakan untuk memvalidasi nama file dan menghasilkan pesan kesalahan khusus berdasarkan persyaratan umum. Yang saya butuhkan saat ini adalah cara untuk menggunakan persyaratan khusus untuk menolak unggahan berdasarkan bidang tempat kami mengunggah.

Saya juga mengetahui Bedakan Gambar Unggulan dari Posting Gambar saat Diunggah tetapi saya ingin solusi pra-simpan.

Ini akan terlihat seperti ini:

masukkan deskripsi gambar di sini

Adakah ide tentang cara memberi informasi wp_handle_upload_prefilter(atau yang serupa) tentang bidang apa yang sedang kita tangani?


Pertanyaan menarik. Secara umum, saya berpikir untuk meneruskan variabel khusus melalui skrip modal pengunggah media kustom yang kemudian dapat Anda lewati untuk diferensiasi lebih lanjut. Ini mungkin satu-satunya cara, meskipun saya tidak 100% yakin tentang itu. Anda akan menemukan informasi yang Anda butuhkan tentang itu, jika Anda melanjutkan dan mencarinya. Setelah itu kembali dan lengkapi pertanyaan Anda dengan informasi konkret itu atau, jika Anda menyelesaikannya sendiri, kirimkan solusi Anda sebagai jawaban. Semoga berhasil!
Nicolai

Jika saya mengatakan kustom, saya maksudkan penggunaan kustom WordPress Media Uploader, seperti misalnya dibahas di sini .
Nicolai

Ya, saya pernah melakukan hal seperti ini sebelumnya, pada masa Pengunggah Flash. Saya akan mencari cara yang lebih bersih kali ini, tapi mungkin saja itu tidak mungkin. Akan melihatnya, terima kasih!
moraleida

Aku mendengarmu, tapi aku sebenarnya tidak berpikir itu cara yang buruk untuk melakukannya. Selain itu, seperti yang saya katakan, saya hanya tidak melihat / tahu cara lain untuk melakukannya, tetapi mungkin ada seseorang yang memiliki lebih banyak pengetahuan untuk menjernihkan hal itu.
Nicolai

1
Apakah Anda maju dengan ini? Jika tidak, tetapi Anda memiliki beberapa kode yang sedang Anda kerjakan, poskan. Saya bersedia menyiapkan hadiah untuk pertanyaan jika ada lebih banyak dasar untuk itu.
Nicolai

Jawaban:


4

Di handler Anda, jika Anda mengatur 'kesalahan', pesan kesalahan akan ditampilkan dan akan membatalkan unggahan

add_filter( 'wp_handle_upload_prefilter', 'custom_upload_filter' );

function custom_upload_filter( $file ) {
    $image_info   = getimagesize( $file['tmp_name'] );
    $image_width  = $image_info[0];
    $image_height = $image_info[1];

    if ( $image_with !== 800 || $image_height !== 600 ) {
        $file['error'] = __( 'Images must be sized exactly 800 * 600', 'your_textdomain' );
    }
    return $file;
}

Jika pengguna Anda mencoba mengunggah ukuran yang berbeda, pesannya adalah:

thefile.png has failed to upload due to an error  
Size must be exactly 800 * 600

Catatan yang wp_handle_upload_prefilterdatang sangat awal dalam pemrosesan unggahan, jadi Anda mungkin ingin menguji apakah file telah diunggah dengan benar (dari sudut pandang HTTP) dan merupakan gambar sebelum menguji ukurannya.

Ref: funtion wp_handle_upload()di file intiwp-admin/includes/file.php


Ya, inilah yang sudah saya lakukan untuk memvalidasi nama file dan properti svg. Apa yang saya butuhkan saat ini adalah cara untuk mengirimkan parameter lain ke filter (atau lainnya) yang menunjukkan bidang mana yang sedang diisi oleh unggahan itu sehingga saya bisa menerapkan batasan berbeda untuk bidang yang berbeda. Ini sebenarnya sedang ditahan saat ini. Saya akan memperbarui pertanyaan nanti dengan temuan saya.
moraleida
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.