PHP-Skript auf WordPress-Seite einbinden
-
-
- Gerade eben
- Anzeige
Hallo!
Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.
- ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
- ✔️ Deutsche Server & DSGVO-konform
- ✔️ Persönlicher Support (kein 0815-Ticket-System)
-
Im Inhaltseditor kannst du natürlich keinen PHP-Code einbinden. Wenn du das auf einer statischen Seite haben willst, dann nimm am besten ein Seitentemplate. Dort kannst du dann den include-Befehl ausführen. Je nachdem wo dein PHP-Script liegt solltest du den vollständigen Pfad angeben, z.B. relativ zum WP-Verzeichnis (Konstante ABSPATH).
-
Hallo marX,
vielen Dank für deine schnelle Antwort.
Aber ich habe im Inhaltseditor doch extra von Visuell auf HTML gewechselt. Auf diese Weise kann man ja auch YouTube-Videos einbinden. Ich dachte, so müsste es gehen. :???:
Wie muss ich denn vorgehen, wenn ich das Skript im Blog selbst nutzen möchte?
Was bedeutet "Konstante ABSPATH"?
Liebe Grüße
Hugo -
Aber ich habe im Inhaltseditor doch extra von Visuell auf HTML gewechselt. Auf diese Weise kann man ja auch YouTube-Videos einbinden. Ich dachte, so müsste es gehen. :???:
Youtube-Videos enthalten auch keinen Code, der in deinem Post (Artikel/Seiten) ausgeführt wird, sprich PHP. Selbst JavaScript in Posts geht nicht ohne weiteres. Deswegen heißt der Editor ja auch "HTML-Editor" und nicht "PHP-Entwicklungsumgebung". ;-)ZitatWie muss ich denn vorgehen, wenn ich das Skript im Blog selbst nutzen möchte?
Du könntest dir das Plugin Exec-PHP installieren, dann kannst du PHP-Code in Posts einbetten. Davon rate ich aber aus Sicherheitsgründen ab. Ich würde - wie ich schon sagte - statt dessen ein Seitentemplate verwenden. In der Doku, Forensuche, Forenlexikon wirst du da sicher was finden.ZitatWas bedeutet "Konstante ABSPATH"?
Die ist ind er wp-config.php definiert und enthält den Serverpfad zum WP-Verzeichnis. Z.B.
Das ist nützlich um die Scripte immer korrekt zu referenzieren. -
Youtube-Videos enthalten auch keinen Code, der in deinem Post (Artikel/Seiten) ausgeführt wird, sprich PHP. Selbst JavaScript in Posts geht nicht ohne weiteres. Deswegen heißt der Editor ja auch "HTML-Editor" und nicht "PHP-Entwicklungsumgebung". ;-)
Hehe, das sehe ich ein. :mrgreen:
Du könntest dir das Plugin Exec-PHP installieren, dann kannst du PHP-Code in Posts einbetten. Davon rate ich aber aus Sicherheitsgründen ab. Ich würde - wie ich schon sagte - statt dessen ein Seitentemplate verwenden. In der Doku, Forensuche, Forenlexikon wirst du da sicher was finden.
Was kann denn mit diesem Plugin im schlimmsten Fall passieren?
So ein Seitentemplate habe ich mittlerweile erstellt. Auf diese Weise ist es mir auch gelungen das PHP-Skript einzubinden. Jetzt stehe ich allerdings vor folgendem Problem: Das PHP-Skript gibt lediglich einen String aus. Dieser String soll an einer bestimmten Stelle im Text der Seite stehen. Aber ich kann das Skript ja nur vor oder hinter
inkludieren. :?
Ach so, vielen Dank! Kann ich denn nicht einfach relativ zu meinem Root-Verzeichnis referenzieren? Also sagen wir mal, das Seitentemplate liegt in /wordpress/wp-content/themes/mein_theme/ und das Skript im Root-Verzeichnis (/). Dann müsste ich doch eigentlich durch Eingabe von ../../../../skript.php korrekt referenzieren, oder?
-
Was kann denn mit diesem Plugin im schlimmsten Fall passieren?
Im schlimmsten Fall? Im schlimmsten Fall erschmuggelt sich ein Angreifer Schreibrechte (für Posts) auf deinem Blog und kann dann somit beliebigen PHP-Code in deine Artikel schmuggeln. oder er bekommt irgendwie Zugriff auf die wp_posts-Tabelle der DB und fügt dort in jeden Artikel Code ein. Durch Exec-PHP wird der dann ausgeführt. Nicht so gut, oder? ;-)ZitatSo ein Seitentemplate habe ich mittlerweile erstellt. Auf diese Weise ist es mir auch gelungen das PHP-Skript einzubinden. Jetzt stehe ich allerdings vor folgendem Problem: Das PHP-Skript gibt lediglich einen String aus. Dieser String soll an einer bestimmten Stelle im Text der Seite stehen. Aber ich kann das Skript ja nur vor oder hinter
inkludieren. :?
Wenn's mitten rein soll, dann würde ich einen Platzhalter in den Artikel schreiben und diesen Platzhalter dann mit einem Filter-Plugin ersetzen. Die Shortcode-API von WP ist da recht komfortabel, auch wenn das jetzt vielleicht etwas kompliziert klingt. Einfache Beispiele hier:
Shortcode API WordPress CodexDarf ich eine Gegenfrage stellen und fragen was du genau bezweckst? Wie gesagt, bei ausführbaren Code in Artikeln frag ich mich immer, ob das wirklich nötig ist. ;-)
ZitatAch so, vielen Dank! Kann ich denn nicht einfach relativ zu meinem Root-Verzeichnis referenzieren?
Klar. Aber ist das hierwirklich "einfacher" als
? ;-)
-
Durch Exec-PHP wird der dann ausgeführt. Nicht so gut, oder? ;-)
Wahrscheinlich nicht. Könnte damit das System dann vollständig kompromittiert werden?
Wenn's mitten rein soll, dann würde ich einen Platzhalter in den Artikel schreiben und diesen Platzhalter dann mit einem Filter-Plugin ersetzen. Die Shortcode-API von WP ist da recht komfortabel, auch wenn das jetzt vielleicht etwas kompliziert klingt. Einfache Beispiele hier:
Shortcode API WordPress CodexKlingt gar nicht mal sooo kompliziert; aber das alles nur, um einen kleinen String wo einzufügen, ist schon heftig. Das hatte ich mir einfacher vorgestellt.
Darf ich eine Gegenfrage stellen und fragen was du genau bezweckst? Wie gesagt, bei ausführbaren Code in Artikeln frag ich mich immer, ob das wirklich nötig ist. ;-)
Klar darfst du. Es soll ein kleiner Timer im Text eingefügt werden.
Ähm, eigentlich nicht. :mrgreen: Ich verstehe nur diesen Serverpfad (/var/www/html/wordpress/) nicht ganz. Per FTP habe ich doch zum Beispiel gar keinen Zugung zu /var/www/ und den darüberliegenden Ebenen.
-
Wahrscheinlich nicht. Könnte damit das System dann vollständig kompromittiert werden?
Es kann auf jeden Fall eine kleine Lücke zu einem Scheunentor werden lassen. Es gibt hier viele user, die Exec-PHP gerne und oft einsetzen und empfehlen. Ich persönlich kann mich da nicht anschließen. Kann natürlich sein, dass ich da etwas paranoid bin. ;-)ZitatKlar darfst du. Es soll ein kleiner Timer im Text eingefügt werden.
Da dafür ist doch die Shortcode-API wie geschaffen: :mrgreen:
fügt einen einfachen Timer ein. Das zu programmieren dürfte kaum über die 5 Codex-Zeilen hinaus gehen wenn das eigentliche Script schon existiert. Das ist vielleicht 1x etwas Aufwand, dafür kannst du dann soviele Timer einbauen wie du möchtest. ;-)ZitatÄhm, eigentlich nicht. Ich verstehe nur diesen Serverpfad (/var/www/html/wordpress/) nicht ganz. Per FTP habe ich doch zum Beispiel gar keinen Zugung zu /var/www/ und den darüberliegenden Ebenen.
Das ist ja auch richtig so. Für Scripte brauchst du aber häufig den vollständigen Pfad. Und dein Hoster sollte dir in seiner FAQ auch genau mitteilen, wie dieser lautet. Aus Migrationsgründen will man diesen aber häufig dynamisch halten, um z.B. bei einem Umzug nicht alle Scripte anpassen zu müssen. Daher legt z.B. WP die ABSPATH-Konstante an. Diese kannst du nutzen (musst du aber nicht ;-)). -
Es kann auf jeden Fall eine kleine Lücke zu einem Scheunentor werden lassen. Es gibt hier viele user, die Exec-PHP gerne und oft einsetzen und empfehlen. Ich persönlich kann mich da nicht anschließen. Kann natürlich sein, dass ich da etwas paranoid bin. ;-)
Das kenne ich. :mrgreen: Für meine Zwecke ist dieses Plugin aber vielleicht doch das richtige, mal schauen.
Da dafür ist doch die Shortcode-API wie geschaffen:
fügt einen einfachen Timer ein. Das zu programmieren dürfte kaum über die 5 Codex-Zeilen hinaus gehen wenn das eigentliche Script schon existiert. Das ist vielleicht 1x etwas Aufwand, dafür kannst du dann soviele Timer einbauen wie du möchtest.
Damit kann ich die Zeitdifferenz von einem festgelegten Datum bis zum aktuellen Datum im Format "1 Jahr, 2 Monate, 3 Wochen, 4 Tage, 5 Stunden, 6 Minuten und 7 Sekunden" ausgeben?
Das ist ja auch richtig so. Für Scripte brauchst du aber häufig den vollständigen Pfad. Und dein Hoster sollte dir in seiner FAQ auch genau mitteilen, wie dieser lautet. Aus Migrationsgründen will man diesen aber häufig dynamisch halten, um z.B. bei einem Umzug nicht alle Scripte anpassen zu müssen. Daher legt z.B. WP die ABSPATH-Konstante an. Diese kannst du nutzen (musst du aber nicht ;-)).
Aha, dann ist diese Konstante ja wirklich gut, denn dynamisch ist (fast) immer besser als fix. :)
Warum (vielen) Skripten allerdings der vollständige Pfad explizit "mitgegeben" werden muss, verstehe ich noch nicht.
Deine Unterstützung ist übrigens wirklich erstklassig, vielen Dank dafür!
-
Damit kann ich die Zeitdifferenz von einem festgelegten Datum bis zum aktuellen Datum im Format "1 Jahr, 2 Monate, 3 Wochen, 4 Tage, 5 Stunden, 6 Minuten und 7 Sekunden" ausgeben?
Das war nur ein Beispiel wie so ein Shortcode aussehen könnte. Die Logik dahinter muss natürlich programmiert werden. So zum Beispiel:PHP
Alles anzeigen// [timer end="2009-12-31"] function sc_timer_func($atts) { extract(shortcode_atts(array( 'end' => 'no foo', ), $atts)); $return_val = ''; include ABSPATH . '/script.php'; return $return_val; } add_shortcode('timer', 'sc_timer_func');
Also in dem Fall wird die variable $end bereitgestellt mit dem Endedatum und dann die Variable $return_val vom Script gefüllt und an den Post zurückgegeben. Ich weiß ja nicht wie dein Script intern aussieht, daher gehts grad nciht genauer. Aber vom Prinzip her etwa so.ZitatAha, dann ist diese Konstante ja wirklich gut, denn dynamisch ist (fast) immer besser als fix. :)
Jepp.ZitatWarum (vielen) Skripten allerdings der vollständige Pfad explizit "mitgegeben" werden muss, verstehe ich noch nicht.
Machts halt einfacher und übersichtlicher, als sich über zig Verzeichnisebenen zu hangeln. Und dynamisiert ists auch sehr flexibel.ZitatDeine Unterstützung ist übrigens wirklich erstklassig, vielen Dank dafür!
Bitte bitte. :-) -
Das war nur ein Beispiel wie so ein Shortcode aussehen könnte. Die Logik dahinter muss natürlich programmiert werden. So zum Beispiel:
PHP
Alles anzeigen// [timer end="2009-12-31"] function sc_timer_func($atts) { extract(shortcode_atts(array( 'end' => 'no foo', ), $atts)); $return_val = ''; include ABSPATH . '/script.php'; return $return_val; } add_shortcode('timer', 'sc_timer_func');Also in dem Fall wird die variable $end bereitgestellt mit dem Endedatum und dann die Variable $return_val vom Script gefüllt und an den Post zurückgegeben. Ich weiß ja nicht wie dein Script intern aussieht, daher gehts grad nciht genauer. Aber vom Prinzip her etwa so.
Wow, vielen Dank für deine Mühe. Wenn in meinem Skript das Datum schon drinsteht, brauche ich diesen Shortcode aber gar nicht, oder?
Machts halt einfacher und übersichtlicher, als sich über zig Verzeichnisebenen zu hangeln. Und dynamisiert ists auch sehr flexibel.
Ok, das stimmt. :-D
-
Wow, vielen Dank für deine Mühe. Wenn in meinem Skript das Datum schon drinsteht, brauche ich diesen Shortcode aber gar nicht, oder?
Du kannst dann einfach den Parameter "end" weglassen, und die ganze Auswertung.PHP// [timer] function sc_timer_func($atts) { $return_val = ''; include ABSPATH . '/script.php'; return $return_val; } add_shortcode('timer', 'sc_timer_func');
Je nachdem was das Script macht reicht u.U. sogar nur die include-Anweisung. -
Um ehrlich zu sein, ich verstehe jetzt nicht, was dieser Shortcode eigentlich macht beziehungsweise wofür ich ihn benötige.
Edit: Ist dieser Shortcode dafür da, ihn nach einmaliger Einrichtung schnell und flexibel einsetzen zu können, also in meinem Fall den Timer zu platzieren? Den Timer benötige ich eigentlich nur an einer einzigen Stelle.
-
Im Prinzip nur dein Include in einem Beitrag auszuführen, ohne gleich global PHP in Beitragen zu erlauben. Das sollte er eigentlich tun.
-
Ach so. Das klingt gut. :-D
-
Unter Verwendung des Plugins Exec-PHP kann ich die Konstante ABSPATH aber nicht direkt im php-include-Teil benutzen, sondern muss hier den Serverpfad ausschreiben, oder?
-
Weiß ich ehrlich gesagt nicht. Wie gesagt, ich versuche den Einsatz solcher Plugins in der Regel zu meiden. ;-)
-
Danke für deine schnelle Antwort. Steht die Konstante ABSPATH denn grundsätzlich ohne $-Zeichen?
-
Danke für deine schnelle Antwort. Steht die Konstante ABSPATH denn grundsätzlich ohne $-Zeichen?
Ja, weil es eine Konstante ist, keine Variable.
PHP: Konstanten - Manual
PHP: Variables - Manual -
Vielen lieben Dank! :-D Ich habe mich nur gefragt, woran der Interpreter merkt, dass es sich um eine Konstante handelt.
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!