WordPress bietet seit Version 3.0 die Funktion add_custom_background an. Damit können Theme-Entwickler ihren Nutzern die Möglichkeit bieten, über den Admin-Bereich ein eigenes Hintergrundbild festzulegen. Statt eines Bildes kann auch eine HTML-Farbe definiert werden — und genau hier liegt das Problem: Legt man bei der Entwicklung ein Standard-Hintergrundbild fest, können Nutzer dieses zwar ändern, aber alternativ keine HTML-Farben als Hintergrund festlegen. In diesem Fall zeigt WordPress ganz stur das Standard-Hintergrundbild an.
Warum ist das so? WP fügt zwar den passenden CSS-Befehl für background-color in den header des Themes ein, lässt background-image aber außen vor. Definiert ein Nutzer nun fröhlich eine HTML-Farbe als Hintergrund (background-color) wird der CSS-Befehl für das Hintergundbild nicht überschrieben. Ergebnis: Die Nutzer-Eingabe verläuft ins Leere.
Theme-Entwickler dürfen trotzdem aufatmen. Mit dem folgenden Bugfix werden sowohl Farbe als auch Bild von WP korrekt behandelt.
In der functions.php wird dem Aufruf von add_custom_background eine Callback-Funktion angefügt:
add_custom_background( 'theme_custom_background_callback' );
Die Callback-Funktion (ebenfalls in die functions.php des Themes packen) überprüft, ob eine Farbe oder ein Bild angezeigt werden soll. Bei einer Farbe wird aus dem CSS-Befehl background-color automatisch background — Problem gelöst!
function theme_custom_background_callback() { /* Get the background image. */ $image = get_background_image(); /* If there's an image, just call the normal WordPress callback. */ if ( !empty( $image ) ) { _custom_background_cb(); return; } /* Get the background color. */ $color = get_background_color(); /* If no background color, return. */ if ( empty( $color ) ) return; /* Use 'background' instead of 'background-color'. */ $style = 'background: #{$color};'
Ein Kommentar
Was halten Sie von diesem Artikel? :)Johannes - 13. April 2012
Hallo Simon
Vielen Dank, ich glaube die wird mein Problem lösen, jedoch funktioniert es noch nicht so ganz, irgendetwas fehlt doch am ende der Funktion oder?
Ich kenn mich leider mit PHP nicht sehr gut aus.
Kannst du vielleicht nochmal drüberschauen.
Gruß
Johannes