web-dev-qa-db-fra.com

supprimer ou mettre à jour add_image_size

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

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

Je voudrais remplacer ces tailles définies à partir du thème de l'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é - le premier 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 grave, mais ce n'est pas efficace.

Existe-t-il une fonction permettant de désenregistrer une taille d'image ajoutée?

À votre santé!

Rayon

13
Q Studio

La fonction add_image_size( $name, $width, $height, $crop ) est suffisamment élégante pour gérer plusieurs appels utilisant le même $name. Il remplace 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 avez à faire pour remplacer la taille de l'image personnalisée par le thème parent consiste à vous assurer que votre appel à add_image_size() déclenche après l'appel du thème parent}.

En supposant que le thème parent ne l’aime pas:

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'appel add_image_size() du thème parent est déclenché au point d'ancrage after_setup_theme, avec la priorité par défaut (c'est-à-dire 10).

(Remarque: si les appels sont non encapsulés dans un rappel, ils sont déclenchés au raccordement plugins_loaded, à la priorité 10.)

Voici la partie critique: le fichier functions.php du thème enfant est analysé avant le du thème parent, donc si vous utilisez les mêmes points d'ancrage pour déclencher vos appels add_image_size(), ils seront remplacés par le parent Appels add_image_size() du thème.

La solution consiste à (utiliser un point d'ancrage plus récent ou une priorité plus faible}, pour s'assurer que l'appel add_image_size() du thème enfant déclenche après celui du thème parent.

Cela devrait faire l'affaire, quelle que soit la manière 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 hook after_setup_theme, mais que nous utilisons un priorité inférieure (c'est-à-dire 11 au lieu de 10. Les rappels sont déclenchés dans l'ordre croissant (priorité inférieure) à priorité inférieure (numéro supérieur), en commençant par la priorité 0 Ainsi, un rappel associé à la priorité 11 sera déclenché après un rappel associé à la priorité 10.

Notez également que le hook after_setup_theme lui-même déclenche après le hook plugins_loaded; ce rappel sera donc toujours prioritaire sur le thème parent, même si le thème parent est _doing_it_wrong(), sans encapsuler ces appels dans un rappel approprié, mais dans un lien approprié. crochet.

20
Chip Bennett

Si quelqu'un souhaite simplement supprimer les tailles d'image supplémentaires, par opposition à la modification des 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);
0
Yulia V