Cum să elimini sau actualizezi add_image_size în WordPress
Lucrez la o temă care are o serie de dimensiuni de imagini definite corect folosind:
add_image_size( 'nume', 500, 200, true );
Aș dori să suprascriu aceste dimensiuni definite din tema copil:
add_image_size( 'nume-nou', 400, 300, true );
Știu că pot adăuga dimensiuni noi, dar dacă adaug același nume, adică:
add_image_size( 'nume', 400, 300, true );
Atunci este folosită funcția din tema părinte - cea din tema copil este ignorată - adăugarea de reguli suplimentare creează imagini suplimentare care nu vor fi niciodată folosite - nu este foarte grav, dar nu este eficient.
Există o funcție pentru a dezînregistra o dimensiune de imagine adăugată?
Mulțumesc!
Ray

Funcția add_image_size( $name, $width, $height, $crop )
este suficient de elegantă pentru a gestiona apeluri multiple folosind același $name
. Ea pur și simplu suprascrie valoarea existentă:
$_wp_additional_image_sizes[$name] = array( 'width' => absint( $width ), 'height' => absint( $height ), 'crop' => (bool) $crop );
Aceasta înseamnă că tot ce trebuie să faci pentru a suprascrie definiția dimensiunii personalizate a imaginii din Tema părinte este să te asiguri că apelul tău către add_image_size()
se execută după apelul din Tema părinte.
Presupunând că Tema Părinte face astfel:
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' );
Atunci apelul add_image_size()
din Tema Părinte se execută la hook-ul after_setup_theme
, la prioritatea implicită (adică 10
).
(Notă: dacă apelurile nu sunt încapsulate într-un callback, atunci ele se execută la hook-ul plugins_loaded
, la prioritatea 10
.)
Iată partea critică: fișierul functions.php
al Temei copil este analizat înainte de cel al Temei părinte, așa că dacă folosești aceleași hook-uri pentru a-ți executa apelurile add_image_size()
, acestea vor fi suprascrise de apelurile add_image_size()
din Tema părinte.
Soluția este să folosești un hook ulterior sau o prioritate mai mică, pentru a te asigura că apelul add_image_size()
din Tema copil se execută după cel din Tema părinte.
Aceasta ar trebui să funcționeze, indiferent de modul în care Tema părinte își execută apelurile:
function child_theme_setup() {
add_image_size( 'name', 400, 300, true );
}
add_action( 'after_setup_theme', 'child_theme_setup', 11 );
Observă că folosim același hook after_setup_theme
, dar cu o prioritate mai mică (adică 11
în loc de 10
). Callback-urile se execută în ordine de la prioritatea mai mare (număr mai mic) la prioritatea mai mică (număr mai mare), începând cu prioritatea 0
. Astfel, un callback atașat la prioritatea 11
se va executa după un callback atașat la prioritatea 10
.
De asemenea, observă că hook-ul after_setup_theme
însuși se execută după hook-ul plugins_loaded
, așa că acest callback va suprascrie totuși Tema părinte, chiar dacă aceasta folosește _doing_it_wrong()
prin neîncapsularea acestor apeluri într-un callback adecvat, atașat la un hook corespunzător.

excelent - mulțumesc, Chip! - le-am avut pe ambele cu aceeași prioritate - am ajustat copilul după părinte și acum funcționează perfect.

Se pare că nu pot suprascrie valoarea dacă un plugin apelează add_image_size :(

Dacă cineva dorește să elimine pur și simplu dimensiunile suplimentare ale imaginilor, în loc să le modifice dimensiunile, poate folosi remove_image_size( string $name ), de exemplu:
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 aici este numele funcției sau orice alt nume pe care îl folosești pentru funcția principală

Adaugă o explicație la răspunsul tău: de ce și cum rezolvă această problemă? Reține că new-name
este un nume de callback invalid.
