usuń lub zaktualizuj add_image_size

16

Pracuję nad motywem, który ma poprawnie zdefiniowaną liczbę rozmiarów obrazów, używając:

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

Chciałbym zastąpić te zdefiniowane rozmiary z motywu potomnego:

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

Wiem, że mogę dodawać nowe rozmiary, ale jeśli dodam tę samą nazwę, tj .:

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

Następnie używane jest wywołanie funkcji rodzica - dziecko jest ignorowane - dodanie dodatkowych reguł dodaje dodatkowe obrazy, które nigdy nie będą używane - nie jest tak źle, ale nie jest wydajne.

Czy istnieje funkcja wyrejestrowania dodanego rozmiaru obrazu?

Twoje zdrowie!

Promień

Q Studio
źródło
Czy możesz napisać cały odpowiedni kod? Czy add_image_size()połączenia tylko siedzą nago functions.php, czy są odpowiednio opakowane w wywołanie zwrotne i podłączone after_setup_theme? Wiedza, która jest kluczowa dla odpowiedzi na twoje pytanie.
Chip Bennett,
cześć chip - dziękuję za twój komentarz - masz rację, jest zawinięty w after_setup_theme - więc znów chodzi o priorytety - zawsze mi tego brakuje!
Q Studio

Odpowiedzi:

22

Ta add_image_size( $name, $width, $height, $crop )funkcja jest wystarczająco płynna, aby obsługiwać wiele połączeń przy użyciu tego samego $name. Po prostu nadpisuje istniejącą wartość :

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

Oznacza to, że wszystko, co musisz zrobić, aby zastąpić definicję niestandardowego rozmiaru obrazu Motywu nadrzędnego, to upewnić się, że Twoje wywołanie jest add_image_size()uruchamiane po wywołaniu Motywu nadrzędnego .

Zakładając, że motyw nadrzędny to lubi:

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

Następnie add_image_size()wywołanie motywu nadrzędnego jest uruchamiane z after_setup_themehakiem, z domyślnym priorytetem (tj 10.).

(Uwaga: jeśli połączenia nie są zawinięte w oddzwanianie, wówczas plugins_loadedwysyłane są w pierwszej kolejności jako haczyk 10).

Oto kluczowa część: plik motywu potomnego functions.phpjest analizowany przed motywem nadrzędnym , więc jeśli użyjesz tych samych haczyków do uruchamiania add_image_size()połączeń, zostaną one zastąpione add_image_size()wywołaniami motywu rodzica .

Rozwiązaniem jest użycie późniejszego haka lub niższego priorytetu , aby zapewnić, że add_image_size()wywołanie Motywu podrzędnego będzie uruchamiane za Motywem nadrzędnym.

To powinno załatwić sprawę, niezależnie od tego, w jaki sposób motyw nadrzędny uruchamia swoje wywołania:

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

Zauważ, że używamy tego samego after_setup_themehaka, ale używamy niższego priorytetu (tj. 11Zamiast 10. Oddzwanianie jest uruchamiane w kolejności od wyższego priorytetu (niższy numer) do niższego priorytetu (wyższy numer), zaczynając od priorytetu 0. Więc oddzwanianie podłączone do priorytetu 11będzie uruchamiane po oddzwonienie przypisane do priorytetu 10.

Należy również zauważyć, że after_setup_themesam hak odpala po tym plugins_loadedhakiem, więc ta zwrotna będzie nadal zastąpić Temat nadrzędny, nawet jeśli rodzic Temat jest _doing_it_wrong()przez nie owijając takich połączeń w odpowiednim oddzwonienia, haczykowate do odpowiedniego haka.

Chip Bennett
źródło
doskonale - dzięki chip! - Miałem ich obu na tym samym priorytecie - wyciszyłem dziecko za rodzicem i wszystko działa dobrze.
Q Studio
Nie mogę nadpisać wartości, jeśli wtyczka wywołuje add_image_size :(
Zhianc
1

Jeśli ktoś chce po prostu usunąć dodatkowe rozmiary obrazu, zamiast zmieniać wymiary, użyj remove_image_size (string $ name) , np.

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);
Julia V.
źródło
-1

W swoim motywie chile musisz użyć add_action( 'after_setup_theme','new-name');

rudzik
źródło
new-name tutaj jest nazwą funkcji lub jakąkolwiek nazwą używasz do swojej głównej funkcji
robin
Dodaj wyjaśnienie do swojej odpowiedzi: dlaczego i jak rozwiązuje problem? Pamiętaj, że new-namejest to niepoprawna nazwa wywołania zwrotnego.
fuxia
„nowa nazwa” to po prostu uchwyt dodawanego rozmiaru obrazu.
Q Studio