WordPress: PHP Code in statischem Text-Widget ausführen ohne Plugin
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.
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 :)
Hallo Felix. Danke für das Kompliment! Super,dass dir der Tipp geholfen hat :) Beste Grüße!
Auch von mir ein herzliches Dankeschön!
Ganz großen respekt. Es sind halt die kleinen Dinge, die das Leben mit WP einfacher machen! Und das ganz ohne PlugIn – Klasse!!!
Danke Andreas, gern geschehen!
Super, jetzt klappt es! Ich glaube jedoch, dass die letzte geschwungene Klammer weg muss. Ansonsten zerschießt es einem die function.php.
DANKE
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 :-) ]
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!
Hi, bei mir wird der PHP-Code auskommentiert ausgegeben. Woran kann das liegen?
Danke!
Daniel
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
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.
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.
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
Gern geschehen :)
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.
[…] um einfach etwas flexibler bei der späteren Gestaltung zu sein. So habe ich durch einen coolen Artikel von Gino erfahren, dass Du […]
Vielen Dank für den guten Tipp!
Ich habe mit einer kleinen Ergänzung (und Quellenangabe) einen Beitrag auf meiner Website geschrieben.
Super, wieder ein Plugin gespart. Danke schön.
Ich werds wohl auch erstmal so nutzen, aber wird die Functions.php denn nicht beim nächsten Update überschrieben?
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/
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.
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
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.
@Hans-Gerd:
Verwende einfach das HTML-Widget. Dann wird der PHP-Code nicht verändert.
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.
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
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.
Hallo zusammen,
als Alternative könnt ihr mein Plugin „WP H-PHP Widget“ verwenden: https://web266.de/software/eigene-plugins/wp-h-php-widget/
Download/PHP-Code über GitHub: https://github.com/m266/wp-h-php-widget
Es funktioniert auch mit der neuesten WP-Version 5.0.2 einwandfrei.
@Gino:
Kannst du ggf. die anderen User verständigen, dass mein Plugin als Alternative genutzt werden kann?
Vielen Dank.
LG Hans
Danke für den Hinweis, ich habe den Artikel entsprechend ergänzt! Beste Grüße, Gino.