Frisch notiert!

Die neusten Artikel aus unserem Blog.

WordPress: PHP Code in statischem Text-Widget ausführen ohne Plugin

Zuletzt aktualisiert am 08/01/2019 von Gino Cremer
29 Kommentare
Wordpress
/ Wordpress / 29

Oftmals steht man in Wordpress vor dem Problem, dass man in den Widgets PHP-Code ausführen möchte. Jetzt könnte man eines der zahlreichen Plugins nutzen. Doch da wir weder zusätzlichen Plugin-Ballast, noch ein weiteres ständig zu aktualisierendes Plugin wünschen, sparen wir uns das doch direkt!

Alternativ-Lösung via Plugin: WP H-PHP Widget

Eine Lösung, die auch mit der aktuellen WordPress Version (Stand Januar 2019 jedenfalls) funktioniert, nennt sich "WP H-PHP Widget". Mehr Informationen sowie das Plugin selber findet man im Netz: https://web266.de/software/eigene-plugins/wp-h-php-widget/

Das magische Zauberwort lautet wie so oft: „functions.php“! Um PHP-Code nun in einem statischen Text-Widget (WordPress-Standard) ausführen zu können, reicht es, wenn wir folgende Funktion der Datei „functions.php“ hinzufügen.

add_filter('widget_text', 'gibmirphp', 99);
function gibmirphp($text) {
if (strpos($text, '<' . '?') !== false) {
ob_start();
eval('?' . '>' . $text);
$text = ob_get_contents();
ob_end_clean();
}
return $text;
}

Was macht die PHP-Funktion denn nun genau?

Die Funktion wird dank des „WordPress-Hooks“ add_filter initialisiert. Wir übergeben anschließend den Inhalt des Text-Widgets der entsprechenden Funktion. Diese prüft nun ob innerhalb des „Textes“ PHP ausgeführt werden soll. Als Kriterium dienen die typischen „<?“ und „php“ Begriffe. Beide werden bewusst getrennt betrachtet, sonst würden Leerzeichen dazwischen eine Ausführung verhindern und „false“ ausgeben. Insofern „true“ (also Element vorhanden) ausgegeben wird, wird der Code „ausgeführt“ und zum Ende hin das fertig geparste HTML „ausgespuckt“.

Das war’s…ohne Plugin, ohne Wartungsaufwand. Vielen Dank an Emanuele Feronato.

Gino Cremer

Ich bin Geschäftsführer der auf Weblösungen spezialisierten Agentur Pixelbar aus dem belgischen Eupen. Ich habe langjährige Erfahrung mit CMS-basierten Kundenprojekten, vornehmlich auf WordPress-Basis und bin ein Webdesigner der ersten Stunde. Daneben arbeite ich auch als Dozent und Berater am WIFI Wien im Bereich Social Media und Webdesign.

Weitere Beiträge von gino anzeigen

29 Kommentare

  1. Geil es funktioniert, vielen vielen Dank genau das habe ich gesucht gehabt 5 mal Daumen hoch für deinen Beitrag, mich wundert es das hier noch kein Kommentar vorhanden ist :)

  2. Ganz großen respekt. Es sind halt die kleinen Dinge, die das Leben mit WP einfacher machen! Und das ganz ohne PlugIn – Klasse!!!

    1. Hallo,

      gerne. Die geschwungene Klammer ist allerdings korrekt… wir haben das Snippet schon sehr oft selber genutzt und konnten bisher nie irgendwelche Fehler feststellen. :-)

      Viele Grüße

      [EDIT: Doch, danke für den Hinweis, wir haben die Klammer gerade korrigiert, fragt sich, wie die sich reinschmuggeln konnte… vorallem, da es bisher zu keinem Fehler führte :-) ]

      1. Hi, erstmal danke für das tolle script. Allerdings komm ich nun nicht mehr in Backend meiner Seite. Irgendeine Idee woran es liegen könnte? Vielen Dank!

    1. Hallo Daniel. Hast du denn auch den PHP-Code richtig in „eckige Klammern“ gepackt? Die sind wichtig, damit das Script ausgelöst wird. Um genauer zu schauen warum es nicht funktioniert, fehlt mir da allerdings etwas der Einblick. Prüf auf jeden Fall ob in der functions.php alles korrekt eingetragen ist und im Text-Widget der PHP-Code korrekt mit < ?php beginnt und mit ?> endet

      1. Kann den selben Fehler unter WP 3.5.1 nachvollziehen. Wollte auf diese Art
        <a href="“>Link
        nutzen, jedoch wird dies genau so als Link ausgegeben, statt die PHP Function auszuführen.

        1. Hallo, wir haben gerade den Code nochmal angepasst. Es müsste jetzt wieder komplett funktionieren. Das WP – System hatte die „< " und ">“ encoded – daher konnte das Snippet nicht mehr korrekt funktionieren.

  3. Gino :) Aller besten Dank für diesen einfachen Einbau! Habe bis gerade eben mehrere Stunden damit verbracht nach einer geeigneten Lösung für mein Problem zu finden und nun endlich fündig geworden!
    Cheers
    Meicel

  4. So einfach und gleichzeitig so clever! Vielen Dank.
    Ich setze gerade meinen Blog auf Plugin-Diät – und dieser Codeschnipsel bildet die Basis um einige (bzw viele) Plugins zu eliminieren.

    1. Hallo Valentina. Wenn du ein Child-Theme nutzt (was du unbedingt tun solltest wenn du Dateien im Theme veränderst), wird dein Theme im Falle eines Updates des „Eltern-Themes“ nicht überschrieben. Wenn du KEIN so genanntes Child-Theme nutzt und direkt innerhalb des Themes „fummelst“, wird in der Tat alles entfernt / überschrieben. Nähere Infos zum Thema Child-Themes gibt es im Netz zum Beispiel bei Elmastudio: http://www.elmastudio.de/ein-wordpress-child-theme-anlegen-so-gehts-richtig/

  5. Habe den Code integriert und leider keinen Erfolg gehabt. Selbst ein einfacher echo Befehl wird ignoriert, ganz zu schweigen von einem richtigen Script, das ich schon seit langem benutze. Vielleicht habt ihr ja noch eine Idee.

  6. Hallo,
    das scheint in der aktuellen WP 4.8 leider nicht (mehr) zu funktionieren:
    Der PHP – Code, der vorher im Text-Widget enthalten war und funktionierte, wird jetzt wohl leider automatisch als Kommentar umgewandelt :-(
    Viele Grüße
    Hans-Gerd

    1. Hallo,
      jetzt habe ich die Lösung gefunden: Änderungen nur im Register „Text“ vornehmen und dann speichern. Wenn man dagegen Änderungen im Register „Text“ vornimmt und anschließend auf das Register „Visuell“ klickt, ums ich das evtl. noch mal anzusehen, dann wird der PHP-Code automatisch auskommentiert.

  7. Hallo ihr,
    ich kämpfe jetzt seit mehreren Stunden. Bei mir wird im Textblog der PHP-Code durch ein   ersetzt. Im Code-Block wird der PHP-Teil nicht ausgeführt. Wir nutzen WP 4.9.4 mit dem Avada-Theme. In PHP fühle ich mich fit, WP habe ich bisher nicht genutzt. Wird von einer Mediengestalterin eingesetzt und ich muss eine Kursübersicht (die dynamisch erzeugt und an ein Anmeldformular weitergegeben werden soll) einarbeite.

  8. Hallo, ist es richtig, dass dieses schöne Script nun nicht mehr funktioniert? habe alles genau befolgt undgelesen, bei mir wird genau der php-code ausgegeben – egal ob im Text-widget oder im html-widget. Könntet ihr das bitte bestätigen oder dementieren? Schöne Grüße Irmen

    1. Hallo Irmen, wir haben es leider lange nicht getestet, da wir es nicht mehr brauchten. Durch die Umstellung der Widgets in den neuen WordPress-Versionen ist es gut möglich, dass sich da etwas geändert hat.

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert