Ausgabe einer Funktion mit Hilfe von PHP Ausgabepuffer modifzieren
Heute musste ich die Darstellung eines WordPress-Plugins anpassen, ohne in den Code selbst eingreifen zu können. Das Plugin klinkt sich in the_content() ein und erzeugt am Ende des Posts eine Ausgabe. Wir haben allerdings auf unserer Seite nach the_content() noch weiteren Inhalt und der Code des Plugins soll erst danach kommen.
Die Funktion the_content() erzeugt mit echo eine Ausgabe, so daß wir hier nicht direkt an den Inhalt herankommen. Zum Glück gibt es den PHP output buffer. Und das Plugin lässt sich mit beliebigen Tags wrappen, so daß wir hier eindeutige Markierungen zur Verfügung haben.
Ich gehe zur Lösung des Problems in drei Schritten vor
- Inhalt von the_content() nicht ausgeben sondern in internen Buffer schreiben
- Diesen Buffer mit einem regulären Ausdruck zerlegen
- Die Einzelteile in der gewünschten Reihenfolge ausgeben
vorher
single.php
<div class="post-entry"> <?php the_content(); ?> UNSER ZUSATZCODE </div>
nachher
single.php
<div class="post-entry"> <?php reorder_the_content(); ?> </div>
functions.php
function reorder_the_content($more_link = null, $stripteaser = \ false) { ob_start(); the_content($more_link, $stripteaser); $content = ob_get_contents(); ob_end_clean(); $pattern = '/^(.*)<ERSTE MARKIERUNG>(.*)<ZWEITE MARKIERUNG>$/'; if (preg_match($pattern, $content, $matches)) { $stripped_content = $matches[1]; $plugin_code = $matches[2]; } else { $stripped_content = $content; $plugin_code = ''; } echo $stripped_content . 'UNSER ZUSATZCODE' . $plugin_code; }
Kommentieren Sie den Beitrag