Tetapkan nama khusus untuk gambar mini yang dihasilkan

9

Apakah ada filter yang tersedia untuk mengatur konvensi penamaan thumbnail yang dibuat secara otomatis?

Sesuatu seperti ini:

  • thumbnail_150x150.jpg -> thumbnail-s.jpg
  • thumbnail_300x300.jpg -> thumbnail-m.jpg
  • thumbnail_600x600.jpg -> thumbnail-l.jpg
Sean Lee
sumber

Jawaban:

4

Tampaknya jawabannya adalah tidak ...

Saya telah mengikuti fungsi inti dan menemukan jalan buntu. Dan menemukan posting ini ( Bagaimana saya bisa membuat add_image_size () memotong dari atas? ) Di mana Rarst mengatakan:

Generasi gambar menengah sangat kaku. Image_resize () menyimpannya dekat dengan kode dan benar-benar tidak memiliki kait.

Tapi , mengikuti petunjuk dari jawaban lain (dari bradt ) dan kode yang dia terbitkan ( Posisi Pemotongan Gambar di WordPress ), saya rasa saya mengerti :)

Dalam fungsinya bt_generate_attachment_metadata, saya baru saja memodifikasi panggilan untuk bt_image_make_intermediate_sizememasukkan parameter terakhir$size

$resized = bt_image_make_intermediate_size( $file, $size_data['width'], $size_data['height'], $size_data['crop'], $size );

Dan memodifikasi awal fungsi bt_image_make_intermediate_sizesebagai berikut:

  • menambahkan $sizeparameter ke fungsi
  • alih-alih nilai default nullke $suffix, a switchke sufiks baru kami
function bt_image_make_intermediate_size( $file, $width, $height, $crop = false, $size ) {
    if ( $width || $height ) {
        switch($size) {
            case 'thumbnail':
                $suffix = 't';
                break;
            case 'medium':
                $suffix = 'm';
                break;
            case 'large':
                $suffix = 'l';
                break;
            default:
                $suffix = null;
                break;
        }
        $resized_file = bt_image_resize( $file, $width, $height, $crop, $suffix, null, 90 );

Di sini , salinan kode lengkap dengan mod saya, hanya untuk referensi.
Dan beda dari aslinya .

Sangat mungkin, semua kode dapat menyusut sampai tulang kosong, tetapi dengan cara ini kita mendapatkan manfaat dari gambar yang dipangkas khusus :))

brasofilo
sumber
1
maaf, masih bepergian. Saya akan mengujinya segera dan memberi tahu Anda. Terima kasih.
Sean Lee
Apakah jawaban ini masih valid? Sudah beberapa tahun, jadi ...
Athoxx
2

Anda dapat menggunakan filter image_make_intermediate_size , tetapi Anda harus mencari tahu nama yang ingin Anda ubah file perantara, sesuai dengan $ filename yang Anda dapatkan (dan kemudian ganti nama file tersebut, karena pada titik ini sudah dibuat).

Saya hanya menghasilkan gambar ukuran sedang untuk "thumbnail", jadi sesederhana ini:

add_filter( 'image_make_intermediate_size', function( $filename ) {

    // old 2017_234783843-100x100.jpg
    $old = $filename;
    // new 2017_234783843-thumbnail.jpg
    $new = preg_replace("/(\d+_\d+)-\d+x\d+\.(.*)/i", "$1-thumbnail.$2", $old );

    rename($old, $new);

    return $new;
} );
Pemenang
sumber
1
regex bisa kurang spesifik"/(.*)-\d+x\d+\.(.*)/i"
kurang