supprimer ou mettre à jour add_image_size

16

Je travaille sur un thème qui a un certain nombre de tailles d'image définies correctement en utilisant:

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

Je voudrais remplacer ces tailles définies du thème enfant:

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

Je sais que je peux ajouter de nouvelles tailles, mais si j'ajoute le même nom, c'est-à-dire:

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

Ensuite, l'appel de la fonction parent est utilisé - celui de l'enfant est ignoré - l'ajout de règles supplémentaires ajoute des images supplémentaires qui ne seront jamais utilisées - ce n'est pas si mal, mais ce n'est pas efficace.

Existe-t-il une fonction pour annuler l'enregistrement d'une taille d'image ajoutée?

À votre santé!

Rayon

Q Studio
la source
Pouvez-vous s'il vous plaît poster le code complet qui est pertinent? Les add_image_size()appels functions.phpsont-ils simplement assis nus , ou sont-ils correctement enveloppés dans un rappel et connectés after_setup_theme? Savoir ce qui est essentiel pour répondre à votre question.
Chip Bennett
salut puce - merci pour votre commentaire - vous avez raison, il est enveloppé dans after_setup_theme - donc c'est une question de priorités à nouveau - ça me manque toujours!
Q Studio

Réponses:

22

La add_image_size( $name, $width, $height, $crop )fonction est suffisamment gracieuse pour gérer plusieurs appels en utilisant la même chose $name. Il écrase simplement la valeur existante :

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

Cela signifie donc que tout ce que vous devez faire pour remplacer la définition du thème parent de la taille d'image personnalisée est de vous assurer que votre appel à se add_image_size()déclenche après l'appel du thème parent .

En supposant que le thème parent l'aime bien:

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

Ensuite, l' add_image_size()appel du thème parent se déclenche sur le after_setup_themecrochet, avec la priorité par défaut (c'est-à-dire 10).

(Remarque: si les appels ne sont pas encapsulés dans un rappel, ils tirent sur le plugins_loadedcrochet, en priorité 10.)

Voici la partie critique: le functions.phpfichier du thème enfant est analysé avant le thème parent , donc si vous utilisez les mêmes crochets pour lancer vos add_image_size()appels, ils seront remplacés par le thème parentadd_image_size() appels .

La solution consiste à utiliser un hook ultérieur ou une priorité inférieure , pour garantir que l' add_image_size()appel du thème enfant se déclenche après du thème parent.

Cela devrait faire l'affaire, quelle que soit la façon dont le thème parent déclenche ses appels:

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

Notez que nous utilisons le même after_setup_themecrochet, mais utiliser une priorité plus faible (c. -à-au 11lieu de 10. Feu Callbacks dans l' ordre de priorité plus élevée (nombre inférieur) à faible priorité (nombre plus élevé), en commençant par priorité 0. Ainsi , un rappel accroché en priorité 11se déclenche après un rappel accroché en priorité10 .

Notez également que le after_setup_themehook lui-même se déclenche après le plugins_loadedhook, donc ce rappel remplacera toujours le thème parent, même si le thème parent est _doing_it_wrong()en n'encapsulant pas ces appels dans un rappel approprié, accroché dans un hook approprié.

Chip Bennett
la source
excellent - merci puce! - Je les avais tous deux sur la même priorité - entaillé l'enfant après le parent et tout fonctionnait bien.
Q Studio
Je n'arrive pas à écraser la valeur si un plugin appelle add_image_size :(
Zhianc
1

Si quelqu'un veut simplement supprimer les tailles d'image supplémentaires, au lieu de modifier les dimensions, utilisez remove_image_size (string $ name) , par exemple

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);
Yulia V
la source
-1

Dans votre thème Chili, vous devez utiliser add_action( 'after_setup_theme','new-name');

Robin
la source
nouveau-nom ici est le nom de la fonction ou quel que soit le nom que vous utilisez pour votre fonction principale
robin
Ajoutez une explication à votre réponse: pourquoi et comment résout-elle le problème? Notez qu'il new-names'agit d'un nom de rappel non valide.
fuxia
"nouveau-nom" est simplement la poignée de la taille d'image ajoutée.
Q Studio