Cum să elimini sau actualizezi add_image_size în WordPress

4 dec. 2012, 17:32:03
Vizualizări: 13.9K
Voturi: 16

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

2
Comentarii

Poți să postezi codul întreg care este relevant? Apelurile add_image_size() sunt pur și simplu lăsate goale în functions.php, sau sunt corect încapsulate într-un callback și conectate la after_setup_theme? Știind acest lucru este esențial pentru a răspunde la întrebarea ta.

Chip Bennett Chip Bennett
4 dec. 2012 18:31:08

Salut Chip - mulțumesc pentru comentariu - ai dreptate, este încapsulat în after_setup_theme - deci se reduce din nou la priorități - uit mereu asta!

Q Studio Q Studio
4 dec. 2012 19:37:48
Toate răspunsurile la întrebare 3
3
27

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.

4 dec. 2012 18:42:07
Comentarii

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

Q Studio Q Studio
4 dec. 2012 19:41:20

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

Zhianc Zhianc
22 apr. 2015 15:57:25

mi-a luat mult timp să găsesc acest răspuns. mulțumesc!

Jacob Raccuia Jacob Raccuia
5 ian. 2021 17:43:09
0

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);
6 sept. 2017 13:56:44
3
-1

În tema ta pentru Chile va trebui să folosești add_action( 'after_setup_theme','new-name');

4 dec. 2012 18:06:04
Comentarii

new-name aici este numele funcției sau orice alt nume pe care îl folosești pentru funcția principală

robin robin
4 dec. 2012 18:07:00

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.

fuxia fuxia
4 dec. 2012 18:53:54

"new-name" este pur și simplu identificatorul (handle) pentru dimensiunea de imagine care se adaugă.

Q Studio Q Studio
4 dec. 2012 19:42:07