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

  1. Inhalt von the_content() nicht ausgeben sondern in internen Buffer schreiben
  2. Diesen Buffer mit einem regulären Ausdruck zerlegen
  3. 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;
}
Verwendete Schlagwörter: ,

Kommentieren Sie den Beitrag

Bitte geben Sie Ihren Namen und Ihre Email-Adresse an. Der Name wird auf der Website veröffentlicht, die Email-Adresse nicht. Wir verwenden diese intern, um Spam zu identifizieren.

Captcha loading...