Bilder lassen sich im WordPress leicht über den integrierten, visuellen Editor einfügen, positionieren und beschriften. Man kann die Beschriftung auch mit den HTML-Formatierungstags kursiv, fett oder kleiner darstellen lassen. Wie sieht es aber aus, wenn man die Farbe, Position, Größe usw. ändern möchte? Oder einen Hyperlink der Beschriftung und nicht dem Bild hinzufügen? Da muss man schon kreativ und “handgreiflich” werden. Ob manuell oder mit einem selbstgeschriebenen Plugin, es ist einfacher als gedacht. Man muss nur den WordPress genauer unter die Lupe nehmen. Wie erstellt der Editor die Bilder samt Beschriftung und Formatierung in dem HTML-Code? Warum kann man nur die Position des ganzen Blockes ändern, nicht aber die der Beschriftung? Wie kann man auf die Elemente und deren Attribute zugreifen? Wie erstellt man eine eigene, formatierbare Beschriftung?
Wie schon in diesem Beitrag erwähnt, ist es möglich mit dem integrierten, visuellen Editor Bilder mit einer Beschriftung in die Seite einzufügen. Es ist auch möglich diese Beschriftung mit den HTML-Formatierungstags wie <b>, <i>, <em>, <small>, <strong> usw. zu versehen. Es funktioniert sogar ganz gut und ist eine schnelle und einfache Lösung das Textaussehen zu verändern. Hat man aber höhere Anschprüche auf das Design gelegt und möchte auf die Tag-Attributen wie style oder class zugreiffen um zum Beispiel den Text in der rechten Ecke des Bildes anzuzeigen, kann diese Methode zum Problem werden. WordPress reagiert auf solche Einträge in dem Editor-Beschriftungsfeld des Bildes mit unerwarteten und unkontolierten Darstellungsergebnissen.
Wie wird ein Bild mit einer Beschriftung von dem Editor hinzugefügt?
Fügt man das Bild aus der Medienbibliothek über den “Medien hinzufügen” – Button ein und wechselt zur Textansicht, sind vorerst alle Tags, Elemente, Attributen, Styles usw. als nativer HTML-Code erstellt.
Trägt man aber die Bildbeschriftung mit ein, sieht die Sache schon anders aus. Der ganze HTML-Code wird in einem caption-Shortcode eingeschlossen.
[caption id="attachment_145" align="aligncenter" width="150"]{...der HTML-Code von oben...} LOGO[/caption]
Der Shortcode caption erlaubt fünf Attribute:
id – eindeutige Bild-Container-ID
align – die CSS-Klasse die den ganzen Bild-Container mit der Beschriftung auf der Seite ausrichtet. Standardklasse ‘alignnone’. Akzeptiert ‘alignleft’, ‘aligncenter’, alignright’, ‘alignnone’
width – die Breite des Bild-Containers
caption – der Beschriftungstext (kann hier oder im Shortcode-Content eingetragen werden)
class – zusätzlichen CSS-Klassen für den Bild-Container-Style
Als Rückgabe wird der HTML-Code für das Bild mit der Beschriftung geliefert.
Die Funktion, die den caption-Shortcode auflöst befindet sich in der Datei: /www/wp-includes/media.php in der Zeile 1512 (WordPress Version 4.9.1):
Zeilen 1513 bis 1520: Beschriftungstext aus dem Shortcode Content oder der caption-Attribute holen.
Der Beschriftungstext kann als caption-Shortcode-Attribute oder Shortcode-Content angegeben werden. Die caption-Shortcode-Attribute wird bevorzugt.
Zeilen 1522 bis 1524: Benutzerdefinierte Filter-Funktionen einbeziehen.
Hier können benutzerdefinierte und registrierte Filter-Funktionen den HTML-Code liefern und die weitere Erstellung durch den Shortcode abbrechen. Mehr dazu weiter unten.
Zeilen 1534 bis 1536: Nur den Bild/Link-Content ausgeben.
Ist die Container-Breite kleiner als 1 Pixel oder die Beschriftung nicht eingetragen, wird nur der Shortcode-Content (Bild und Link ohne Beschriftung) ausgegeben.
Zeilen 1538 bis 1539: ID, falls vorhanden, auf gültige Zeichen überprüfen.
Zeile 1541: Die CSS-Klassen für das Container-Element zusammenführen.
Hier werden die Namen der CSS-Klassen in einen String zusammengefasst. Die wp-caption-Klasse ist standardmäßig immer dabei, die anderen kommen aus den align– und class-Shortcode-Attributen.
Zeile 1543: Die HTML 5 Ünterstützung ermitteln.
Zeilen 1545 bis 1547: Die Container-Breite ermitteln.
Zeilen 1549 bis 1552: Container-Element-Style erstellen.
Hier wird nur die maximale Breite des Containers festgelegt.
Zeilen 1554 bis 1560: HTML-Code erstellen.
Bei HTML 5 wird ein figure– sonst ein div-Container erstellt und die id, style und class-Attributen hinzugefügt. Danach folgen die Link- und Image-Elemente. Bei HTML 5 wird die Bildbeschriftung mit figcaption, sonst mit einem Absatztext p-Element angehangen und der Container geschlossen.
Warum kann man im Editor den Style einer Beschriftung nicht ändern?
In der Zeile 1556 bzw. 1559 der oben gezeigten Shortcode-Funktion kann man erkennen, dass die Attributte der Bildbeschriftungselemente figcaption und p festgelegt worden sind und der Shortcode nur den Inhalt, nicht aber den Style beeinflussen kann. Ein individuelles Hinzufügen von CSS-Klassen oder zusätzlichen Attributen ist somit nicht möglich. Die Anpassungen in den wp-caption und wp-caption-text CSS-Klassen haben eine globale Auswirkung auf alle Bild-Container der Webseite.
Der HTML-Code, der in die Seite eingefügt wird, sieht also folgendermassen aus:
Wie kann man auf den Bildbeschriftung-Style vom Editor aus zugreifen?
Es gibt eigentlich nur vier bedingt anwendbare Varianten den Style der Beschriftung anzupassen. Eine davon hat eine globale Auswirkung.
Die CSS-Klasse wp-caption-text in dem benutzerdefinierten CSS-Style anpassen. Der Style gilt für alle Beschriftungen der ganzen Webseite. Je nach dem was man erreichen will, kann es als Vor- oder Nachteil angesehen werden.
Den Shortcode im Text-Editor manuell mit dem HTML-Code ersetzen. Vorteil: Volle Kontrolle über den ganzen Bild-Container. Individuelle Styles möglich. Nachteil: Muss immer manuell per Hand im Text-Editor erstellt werden.
Beispiel:
Ein Bild aus der Medien-Bibliothek importieren und beim Einfügen anpassen und mit einer Beschriftung versehen.
Die Seite im Vorschau laden.
Die Vorschauseite im Browser als Text anzeigen lassen (z.B. Mozilla: Menü ⇒ Entwickler Werkzeuge ⇒ Seitenquelltext anzeigen).
In dem Vorschauseitenquelltext nach der caption-Shortcode ID suchen.
Den ganzen figure bzw. div-Container kopieren.
Den caption-Shortcode im WordPress-Editor mit dem kopierten HTML-Code ersetzen.
TIPP: Um die Beschriftung über dem Bild anzuzeigen, das figcaption bzw. p – Tag über dem Link/Bild (a, img)-Tag platzieren.
Eine eigene Filter-Funktion erstellen, die in der Zeile 1522 der img_caption_shortcode-Funktion greift und einen angepassten HTML-Code ausgibt. Vorteil: Eine globale oder lokale Formatierung der Beschriftung. Je nach dem wie die Filter-Funktion implementiert wurde. Nachteil: Definition zusätzlicher Shortcode-Argumente schlägt im visuellen Editor fehl. Sie werden knallhart entfernt. Es lässt sich mit dieser Methode also nur eine Beschriftung mit einer festen Formatierung erstellen. Ausserdem wird diese Funktion nicht individuell, sondern auf allen auf der Webseite eingefügten caption-Shortcodes ausgeführt. Eine Beschriftung-CSS-Klassen-Angabe in dem Container class-Argument des Shortcodes wäre möglich, wenn sie in der Filter-Funktion korrekt extrahiert würde. Zum Beispiel durch eine Konvention, alle CSS-Klassen mit dem Prefix ext- gehören zum (Extended) Caption-Text-Style, die restlichen zum Container-Style.
Beispiel:
Dem caption-Shortcode Argument class werden zusätzliche CSS-Klassen mit dem Namensprefix ctc- übergeben. Die Filter-Funktion extrahiert diese Klassen für den Beschriftungs-, alle anderen für den Container-Style.
Die Datei /www/wp-content/plugins/caption-shortcode-filter/caption-shortcode-filter.php wie oben erstellen und im Admin ⇒ Plugins aktivieren.
Jetzt kann man eine benutzerdefinierte CSS-Klasse erstellen und dem caption-Shortcode class-Argument anhängen.
Eigenen Shortcode-Plugin schreiben, der auch die Beschriftung-Style-Parameter entgegen nimmt. Vorteil: Volle und individuelle Kontrolle über den Bild-Container. Nachteil: Der Shortcode muss auch manuell eingegeben werden. Ausser man baut dafür ein eigenes Widget oder erweitert das visuelle tinyMCE-Editor-Widget.
Shortcodes brauchen länger als reine HTML-Codes um im Browser aufgebaut zu werden. Viele Shortcodes auf einer Seite können sich auf die Performance auswirken. Meine persönlich bevorzugte Methode ist die manuelle HTML-Code Eingabe. Außer den Style anzupassen macht es nicht viel Arbeit den Code aus der Browser-Vorschauquellcode-Ansicht zu kopieren.