Rimuovere o aggiornare add_image_size
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

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.

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

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

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

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

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