Die Holzhammer-Methode

Bei WordPress trifft man ab und zu mal auf die Situation, dass man in der Ausgabe im Frontend seiner Website einen HTML-Code hat, der nicht die eigenen Anforderungen erfüllt, der sich aber ebenso nicht anpassen lässt. Er stammt entweder vom WordPress Core selbst oder von einem Plugin, welches den Code weder über ein Template noch über einen verwendbaren Hook ausgibt. In dem Fall muss man – wie ich sie gerne nenne – die Holzhammer-Methode verwenden, die ich nun hier kurz beschreiben werde.

Worum geht es?

Ein praktisches Beispiel: der WordPress Core liefert den robots-Tag im HTML-Code in der Form aus:

<meta name='robots' content='max-image-preview:large' />

Der Code stammt von dieser Stelle hier: https://github.com/WordPress/WordPress/blob/master/wp-includes/robots-template.php#L49

Wie man sieht, ist er dort nicht anpassbar. Er steht genau so im Code vom WordPress Core. Man möchte nun aber statt der einfachen die doppelten Anführungszeichen am HTML-Attribut „robots“ haben.

PHP Buffer verwenden

Um das zu ermöglichen, muss man die Ausgabe des HTML-Codes im Frontend anpassen. Eine Lösung dafür könnte folgender Code unter Verwendung von PHP Buffer mit ob_start() sein:

function custom_replace_quotes( $buffer ) {
    // Here you can change the HTML content
    return str_replace( "'robots'", '"robots"', $buffer );
}

add_action( 'template_redirect', function() {
    ob_start();
    ob_start( 'custom_replace_quotes' );
});

Hier passiert folgendes:

  • Im template_redirect-Hook wird zunächst der PHP Buffer aktiviert. Also in dem Moment, wo WordPress das anzuzeigende Template ermittelt, folglich vor jeder Ausgabe.
  • Bei deinem zweiten Aufruf wird eine Callback-Funktion als Parameter übergeben, die wiederum nach Ende der Ausgabe automatisch aufgerufen werden soll.
  • Und diese Callback-Funktion führt dann die Ersetzung der einfachen zu den doppelten Anführungszeichen durch.

Möglichkeiten

Das oben beschriebene Vorgehen ermöglicht zahlreiche Optionen, die man in scheinbar unlösbaren Fällen hat. Man kann damit jeglichen HTML-Code im Frontend anpassen. Optimal wäre natürlich, wenn man hierbei mit regulären Ausdrücken arbeitet, um die anzupassenden Code-Stellen auch wirklich zu treffen.

Fallstricke

Man muss jedoch auch gleichzeitig aufpassen bei diesem Lösungsweg. Es gibt 2 Fallstricke:

  • Der PHP Buffer selbst könnte ggfs. einen Fehler werfen und so die Ausgabe der gesamten Website stören. Ob das passiert hängt vom HTML-Code selbst, aber auch von serverseitigen Einstellungen im Hosting ab. Es könnten hierbei auch Grenzwerte erreicht werden.
  • Andere Plugins könnten das ebenso machen. Caching-Plugins sind sehr bekannt dafür Buffer-Methoden für die Ausgabe zu verwenden. Dadurch könnte es dazu kommen, dass 2 oder mehr Codes die gleiche Funktion ausführen wollen – was ebenso in einer nicht erreichbaren Website enden könnte.

Fazit

Auch wenn es diese Möglichkeit gibt, die bessere Lösung für solche Fälle ist weiterhin die Anpassung an der Quelle des HTML-Codes selbst. Nur sollte man eben weder die WordPress Core Dateien noch Plugin- oder Theme-Dateien anpassen. Eventuell wäre es empfehlenswerte sich in den Fällen an den Support der verantwortlichen Komponenten zu wenden.