hapus atau perbarui add_image_size


16

Saya sedang mengerjakan tema yang memiliki sejumlah ukuran gambar yang didefinisikan dengan benar menggunakan:

add_image_size( 'name', 500, 200, true );

Saya ingin mengganti ukuran yang ditentukan ini dari tema anak:

add_image_size( 'new-name', 400, 300, true );

Saya tahu saya bisa menambahkan ukuran baru, tetapi jika saya menambahkan nama yang sama yaitu:

add_image_size( 'name', 400, 300, true );

Kemudian panggilan fungsi orang tua digunakan - anak yang diabaikan - menambahkan aturan tambahan menambahkan gambar tambahan yang tidak akan pernah digunakan - tidak begitu buruk, tetapi tidak efisien.

Apakah ada fungsi untuk membatalkan registrasi ukuran gambar yang ditambahkan?

Bersulang!

sinar


Bisakah Anda memposting seluruh kode yang relevan? Apakah add_image_size()panggilan hanya duduk telanjang functions.php, atau mereka dibungkus dengan benar dalam panggilan balik, dan dihubungkan after_setup_theme? Mengetahui mana yang penting untuk menjawab pertanyaan Anda.
Chip Bennett

hai chip - terima kasih atas komentar Anda - Anda benar itu dibungkus after_setup_theme - jadi ini semua tentang prioritas lagi - Saya selalu merindukan itu!
Q Studio

Jawaban:


22

The add_image_size( $name, $width, $height, $crop )Fungsi cukup anggun untuk menangani beberapa panggilan menggunakan yang sama $name. Itu hanya menimpa nilai yang ada :

$_wp_additional_image_sizes[$name] = array( 'width' => absint( $width ), 'height' => absint( $height ), 'crop' => (bool) $crop );

Jadi itu berarti semua yang perlu Anda lakukan untuk mengganti definisi Tema induk dari ukuran gambar khusus adalah untuk memastikan bahwa panggilan Anda akan add_image_size()diaktifkan setelah panggilan Tema induk .

Dengan asumsi bahwa Tema Orangtua suka:

function parent_theme_setup() {
    add_image_size( 'name', 500, 200, true );
    add_image_size( 'new-name', 400, 300, true );
}
add_action( 'after_setup_theme', 'parent_theme_setup' );

Kemudian add_image_size()panggilan Tema orangtua diaktifkan di after_setup_themehook, pada prioritas default (yaitu 10).

(Catatan: jika panggilan tidak dibungkus dengan panggilan balik, maka panggilan akan menjadi plugins_loadedprioritas utama 10.)

Inilah bagian penting: file Tema anak functions.phpdiurai sebelum Tema orangtua , jadi jika Anda menggunakan kait yang sama untuk memecat add_image_size()panggilan Anda , mereka akan ditimpa oleh add_image_size()panggilan Tema induk .

Solusinya adalah dengan menggunakan pengait yang lebih baru atau prioritas yang lebih rendah , untuk memastikan bahwa add_image_size()panggilan Tema anak menyala setelah Tema induk.

Ini harus melakukan trik, terlepas dari bagaimana Tema induk mengeluarkan panggilannya:

function child_theme_setup() {
    add_image_size( 'name', 400, 300, true );
}
add_action( 'after_setup_theme', 'child_theme_setup', 11 );

Perhatikan bahwa kami menggunakan after_setup_themepengait yang sama , tetapi menggunakan prioritas yang lebih rendah (yaitu 11alih-alih 10. Callback diaktifkan secara berurutan dari prioritas yang lebih tinggi (angka yang lebih rendah) ke prioritas yang lebih rendah (angka yang lebih tinggi), dimulai dengan prioritas 0. Jadi panggilan balik yang dikaitkan dengan prioritas 11akan diaktifkan setelah panggilan balik yang diprioritaskan 10.

Perhatikan juga bahwa after_setup_themekait itu sendiri kebakaran setelah itu plugins_loadedhook, sehingga callback ini masih akan menimpa orang tua Tema, bahkan jika orang tua Theme adalah _doing_it_wrong()dengan tidak membungkus panggilan tersebut dalam callback yang tepat, ketagihan menjadi kait yang sesuai.


luar biasa - terima kasih chip! - Saya memiliki mereka berdua pada prioritas yang sama - membekukan anak itu setelah orangtua dan semua bekerja dengan baik.
Q Studio

Sepertinya saya tidak bisa menimpa nilai jika plugin memanggil add_image_size :(
Zhianc

1

Jika seseorang hanya ingin menghapus ukuran gambar tambahan, tidak seperti mengubah dimensi, gunakan remove_image_size (string $ name) , mis.

function pinboard_child_theme_setup( $sizes) {

    $image_size_names = array('thumbnail', 'medium', 'large',
        'slider-thumb', 'blog-thumb', 'teaser-thumb', 'gallery-1-thumb',
        'gallery-2-thumb', 'gallery-3-thumb', 'image-thumb', 'video-thumb');

    $image_size_names_length = count($image_size_names);
    for($x = 0; $x < $image_size_names_length; $x++) {
        remove_image_size($image_size_names[$x]);
    }   
}
add_action( 'after_setup_theme', 'pinboard_child_theme_setup', 11);

-1

Dalam tema Chili Anda, Anda perlu menggunakan add_action( 'after_setup_theme','new-name');


nama baru di sini adalah nama fungsi atau nama apa pun yang Anda gunakan untuk fungsi utama Anda
robin

Tambahkan penjelasan pada jawaban Anda: mengapa dan bagaimana cara memecahkan masalah? Perhatikan bahwa itu new-nameadalah nama panggilan balik yang tidak valid.
fuxia

"nama baru" hanyalah pegangan dari ukuran gambar yang ditambahkan.
Q Studio
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.