PHP-Skript auf WordPress-Seite einbinden

  • Guten Abend euch allen!

    Ich würde gerne auf einer WordPress-Seite ein PHP-Skript, das sich in einer separaten PHP-Datei befindet, einbinden. Ich habe es mit

    PHP
    <?php include("php-skript.php"); ?>

    versucht, aber leider funktioniert das nicht. Wisst ihr, wie das geht?

    Liebe Grüße
    Hugo

    • 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)

    Mehr erfahren

  • 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". ;-)

    Zitat

    Wie 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.

    Zitat

    Was bedeutet "Konstante ABSPATH"?


    Die ist ind er wp-config.php definiert und enthält den Serverpfad zum WP-Verzeichnis. Z.B.

    Code
    /var/www/html/wordpress/


    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

    PHP
    <?php the_content(); ?>

    inkludieren. :?

    Die ist in der wp-config.php definiert und enthält den Serverpfad zum WP-Verzeichnis. Z.B.

    Code
    /var/www/html/wordpress/

    Das ist nützlich um die Scripte immer korrekt zu referenzieren.

    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? ;-)

    Zitat

    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

    PHP
    <?php the_content(); ?>

    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 Codex

    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. ;-)

    Zitat

    Ach so, vielen Dank! Kann ich denn nicht einfach relativ zu meinem Root-Verzeichnis referenzieren?


    Klar. Aber ist das hier

    Code
    ../../../../skript.php

    wirklich "einfacher" als

    Code
    ABSPATH . '/script.php'

    ? ;-)

  • 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 Codex

    Klingt 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.

    Klar. Aber ist das hier

    Code
    ../../../../skript.php

    wirklich "einfacher" als

    Code
    ABSPATH . '/script.php'

    ? ;-)

    Ä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. ;-)


    Zitat

    Klar darfst du. Es soll ein kleiner Timer im Text eingefügt werden.


    Da dafür ist doch die Shortcode-API wie geschaffen: :mrgreen:

    Code
    [timer end="2009-12-31"]


    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:

    Code
    [timer end="2009-12-31"]

    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:


    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.


    Zitat

    Aha, dann ist diese Konstante ja wirklich gut, denn dynamisch ist (fast) immer besser als fix. :)


    Jepp.

    Zitat

    Warum (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.

    Zitat

    Deine 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:

    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.

    Einmal editiert, zuletzt von h-u-g-o (6. Februar 2009 um 14:19)

  • 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?

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!