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