Entfernen oder Aktualisieren von add_image_size

16

Ich arbeite an einem Thema, das eine Reihe von Bildgrößen hat richtig definiert werden:

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

Ich möchte diese definierten Größen aus dem untergeordneten Thema überschreiben:

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

Ich weiß, dass ich neue Größen hinzufügen kann, aber wenn ich den gleichen Namen hinzufüge, dh:

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

Dann wird der übergeordnete Funktionsaufruf verwendet - der untergeordnete wird ignoriert - das Hinzufügen zusätzlicher Regeln fügt zusätzliche Bilder hinzu, die niemals verwendet werden - es ist nicht so schlimm, aber nicht effizient.

Gibt es eine Funktion zum Abmelden einer hinzugefügten Bildgröße?

Prost!

Strahl

Q Studio
quelle
Können Sie bitte den gesamten relevanten Code posten ? add_image_size()Sitzen die Anrufe nur nackt functions.phpoder sind sie ordnungsgemäß in einen Rückruf eingebunden und damit verbunden after_setup_theme? Wissen, was für die Beantwortung Ihrer Frage entscheidend ist.
Chip Bennett
hi chip - danke für deinen kommentar - du hast recht, es ist in after_setup_theme verpackt - hier geht es wieder um prioritäten - das vermisse ich immer!
Q Studio

Antworten:

22

Die add_image_size( $name, $width, $height, $crop )Funktion ist elegant genug, um mehrere Anrufe mit derselben Funktion zu bearbeiten $name. Es überschreibt einfach den vorhandenen Wert :

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

Das heißt also, dass alles , was Sie tun müssen , um das übergeordnete Themas der Definition der benutzerdefinierten Bildgröße außer Kraft zu setzen, um sicherzustellen , dass Ihr Anruf zu add_image_size()Bränden nach dem übergeordneten Thema Ruf .

Angenommen, das übergeordnete Thema gefällt mir so:

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

Dann wird der add_image_size()Anruf des übergeordneten Themas am after_setup_themeHook mit der Standardpriorität (dh 10) ausgelöst .

(Hinweis: Wenn die Anrufe nicht in einen Rückruf eingebunden sind, werden sie plugins_loadedvorrangig am Hook ausgelöst 10.)

Hier ist der entscheidende Teil: Die functions.phpDatei des untergeordneten Themes wird vor der Datei des übergeordneten Themes analysiert. Wenn Sie also dieselben Hooks zum Auslösen Ihrer add_image_size()Anrufe verwenden, werden diese durch die add_image_size()Aufrufe des übergeordneten Themes überschrieben .

Die Lösung ist auf einen späteren Haken oder eine niedrigere Priorität zu verwenden , dass das Kind Theme , um sicherzustellen , add_image_size()Anruf Feuer nach der Mutter Thema ist.

Dies sollte der Trick sein, unabhängig davon, wie das übergeordnete Thema seine Aufrufe auslöst:

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

Beachten Sie, dass wir verwenden die gleichen after_setup_themeHaken, sondern verwenden eine niedrigere Priorität (dh 11statt 10. Rückrufe Feuer in der Reihenfolge von höherer Priorität (niedrigere Zahl) Priorität (höhere Zahl) zu senken, mit Priorität beginnen 0. So ein Rückruf in Priorität angeschlossen 11wird Feuer nach ein Rückruf mit Priorität 10.

Beachten Sie auch, dass der after_setup_themeHook selbst nach dem plugins_loadedHook ausgelöst wird, sodass dieser Callback das übergeordnete Theme überschreibt, auch wenn das übergeordnete Theme _doing_it_wrong()solche Aufrufe nicht in einen entsprechenden Callback einbindet und in einen entsprechenden Hook eingebunden ist.

Chip Bennett
quelle
ausgezeichnet - danke Chip! - Ich hatte beide die gleiche Priorität - habe das Kind nach dem Elternteil zurückgeschnitten und alles hat gut funktioniert.
Q Studio
Ich kann den Wert scheinbar nicht überschreiben, wenn ein Plugin add_image_size aufruft :(
Zhianc
1

Wenn jemand die zusätzlichen Bildgrößen einfach deaktivieren möchte, anstatt die Abmessungen zu ändern, verwenden Sie remove_image_size (string $ name) , z

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);
Yulia V
quelle
-1

In Ihrem Chile-Thema müssten Sie verwenden add_action( 'after_setup_theme','new-name');

Robin
quelle
Neuer Name Hier ist der Name der Funktion oder der Name, den Sie für Ihre Hauptfunktion verwenden
Robin
Fügen Sie Ihrer Antwort eine Erklärung hinzu: Warum und wie löst sie das Problem? Beachten Sie, dass dies new-nameein ungültiger Rückrufname ist.
fuxia
"Neuer Name" ist einfach das Handle der hinzugefügten Bildgröße.
Q Studio