rimuovere o aggiornare add_image_size


16

Sto lavorando a un tema che ha una serie di dimensioni dell'immagine 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 di poter aggiungere nuove dimensioni, ma se aggiungo lo stesso nome, ovvero:

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

Quindi viene utilizzata la chiamata della funzione genitore - quella figlio viene ignorata - l'aggiunta di regole extra aggiunge immagini extra che non verranno mai utilizzate - non è poi così male, ma non è efficiente.

Esiste una funzione per annullare la registrazione di una dimensione di immagine aggiunta?

Saluti!

raggio


Potete per favore pubblicare l' intero codice rilevante? Le add_image_size()chiamate sono semplicemente nude functions.phpo sono correttamente inserite in una callback e agganciate after_setup_theme? Sapere quale è fondamentale per rispondere alla tua domanda.
Chip Bennett,

ciao chip - grazie per il tuo commento - hai ragione, è racchiuso in after_setup_theme - quindi questo riguarda di nuovo le priorità - mi manca sempre!
Q Studio

Risposte:


22

La add_image_size( $name, $width, $height, $crop )funzione è abbastanza aggraziata da gestire più chiamate usando la stessa $name. Sovrascrive semplicemente il valore esistente :

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

Ciò significa che tutto ciò che è necessario fare per ignorare la definizione del tema principale della dimensione dell'immagine personalizzata è garantire che la chiamataadd_image_size() venga attivata dopo la chiamata del tema principale .

Supponendo che al tema principale piaccia:

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

Quindi la add_image_size()chiamata del tema principale si after_setup_themeattiva automaticamente, con la priorità predefinita (ad es 10.).

(Nota: se le chiamate non sono racchiuse in una richiamata, si plugins_loadedattivano in modo prioritario 10.)

Ecco la parte critica: il functions.phpfile del tema figlio viene analizzato prima del tema principale , quindi se si utilizzano gli stessi hook per attivare le add_image_size()chiamate, verranno sovrascritte dalle add_image_size()chiamate del tema principale .

La soluzione consiste nell'utilizzare un hook successivo o una priorità inferiore , per garantire che la add_image_size()chiamata del tema figlio venga attivata dopo quella del tema principale.

Questo dovrebbe fare il trucco, indipendentemente da come il tema principale genera le sue chiamate:

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

Si noti che utilizziamo lo stesso after_setup_themehook, ma utilizziamo una priorità più bassa (ovvero 11invece di 10. I callback si attivano in ordine da priorità più alta (numero più basso) a priorità più bassa (numero più alto), iniziando con la priorità 0. Quindi un callback collegato alla priorità si 11attiverà dopo una richiamata agganciata alla priorità 10.

Si noti inoltre che l' after_setup_themehook stesso si attiva dopo l' plugins_loadedhook, quindi questo callback ha ancora la precedenza sul tema principale, anche se il tema principale _doing_it_wrong()non racchiude tali chiamate in un callback appropriato, collegato a un hook appropriato.


eccellente - grazie chip! - Li avevo entrambi sulla stessa priorità - ho riportato il bambino indietro dopo il genitore e tutti hanno lavorato bene.
Q Studio

Non riesco a sovrascrivere il valore se un plugin chiama add_image_size :(
Zhianc

1

Se qualcuno vuole semplicemente disinserire le dimensioni dell'immagine aggiuntive, invece di cambiare le dimensioni, usa remove_image_size (stringa $ name) , ad es.

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

Nel tuo tema del Cile dovresti usare add_action( 'after_setup_theme','new-name');


new-name qui è il nome della funzione o il nome che stai usando per la tua funzione principale
robin

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

"new-name" è semplicemente la maniglia della dimensione dell'immagine che viene aggiunta.
Q Studio
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.