Rimuovere o aggiornare add_image_size

4 dic 2012, 17:32:03
Visualizzazioni: 13.9K
Voti: 16

Sto lavorando su un tema che ha diverse dimensioni di immagini definite correttamente usando:

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

Vorrei sovrascrivere queste dimensioni definite dal tema figlio:

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

So che posso aggiungere nuove dimensioni, ma se aggiungo lo stesso nome cioè:

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

Allora viene utilizzata la chiamata della funzione del genitore - quella del tema figlio viene ignorata - aggiungere regole extra crea immagini aggiuntive che non verranno mai utilizzate - non è gravissimo, ma non è efficiente.

Esiste una funzione per deregistrare una dimensione immagine aggiunta?

Saluti!

Ray

2
Commenti

Puoi pubblicare l'intero codice rilevante? Le chiamate add_image_size() sono semplicemente inserite così come sono in functions.php, oppure sono correttamente racchiuse in un callback e agganciate a after_setup_theme? Saperlo è fondamentale per rispondere alla tua domanda.

Chip Bennett Chip Bennett
4 dic 2012 18:31:08

ciao chip - grazie per il tuo commento - hai ragione è racchiuso in after_setup_theme - quindi si tratta ancora una volta di priorità - me lo dimentico sempre!

Q Studio Q Studio
4 dic 2012 19:37:48
Tutte le risposte alla domanda 3
3
27

La funzione add_image_size( $name, $width, $height, $crop ) è abbastanza elegante da gestire chiamate multiple utilizzando lo stesso $name. Semplicemente sovrascrive il valore esistente:

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

Ciò significa che tutto ciò che devi fare per sovrascrivere la definizione della dimensione personalizzata dell'immagine del tema genitore è assicurarti che la tua chiamata a add_image_size() venga eseguita dopo quella del tema genitore.

Supponendo che il Tema Genitore faccia così:

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' );

Allora la chiamata add_image_size() del Tema Genitore viene eseguita all'hook after_setup_theme, con la priorità predefinita (cioè 10).

(Nota: se le chiamate non sono racchiuse in una callback, vengono eseguite all'hook plugins_loaded, con priorità 10.)

Ecco la parte cruciale: il file functions.php del Tema Figlio viene analizzato prima di quello del Tema Genitore, quindi se utilizzi gli stessi hook per eseguire le tue chiamate add_image_size(), verranno sovrascritte dalle chiamate add_image_size() del Tema Genitore.

La soluzione è utilizzare un hook successivo o una priorità più bassa, per assicurarti che la chiamata add_image_size() del Tema Figlio venga eseguita dopo quella del Tema Genitore.

Questo dovrebbe funzionare, indipendentemente da come il Tema Genitore esegue le sue chiamate:

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

Nota che utilizziamo lo stesso hook after_setup_theme, ma con una priorità più bassa (cioè 11 invece di 10. Le callback vengono eseguite in ordine dalla priorità più alta (numero più basso) alla priorità più bassa (numero più alto), a partire dalla priorità 0. Quindi una callback agganciata alla priorità 11 verrà eseguita dopo una callback agganciata alla priorità 10.

Nota inoltre che l'hook after_setup_theme stesso viene eseguito dopo l'hook plugins_loaded, quindi questa callback sovrascriverà comunque il Tema Genitore, anche se quest'ultimo sta _doing_it_wrong() non racchiudendo tali chiamate in una callback appropriata, agganciata a un hook appropriato.

4 dic 2012 18:42:07
Commenti

eccellente - grazie chip! - li avevo entrambi con la stessa priorità - ho abbassato il figlio dopo il genitore e ora funziona tutto bene.

Q Studio Q Studio
4 dic 2012 19:41:20

non riesco a sovrascrivere il valore se un plugin sta chiamando add_image_size :(

Zhianc Zhianc
22 apr 2015 15:57:25

ho impiegato molto tempo per trovare questa risposta. grazie!

Jacob Raccuia Jacob Raccuia
5 gen 2021 17:43:09
0

Se qualcuno desidera semplicemente rimuovere le dimensioni aggiuntive delle immagini, anziché modificarle, può utilizzare remove_image_size( string $name ), ad esempio:

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);
6 set 2017 13:56:44
3
-1

Nel tuo tema child dovrai utilizzare add_action( 'after_setup_theme','nuovo-nome');

4 dic 2012 18:06:04
Commenti

new-name qui è il nome della funzione o qualunque nome tu stia usando per la tua funzione principale

robin robin
4 dic 2012 18:07:00

Aggiungi una spiegazione alla tua risposta: perché e come risolve il problema? Nota che new-name è un nome di callback non valido.

fuxia fuxia
4 dic 2012 18:53:54

"new-name" è semplicemente l'handle della dimensione dell'immagine che viene aggiunta.

Q Studio Q Studio
4 dic 2012 19:42:07