Title: PHP-Source im Text
Last modified: 19. September 2017

---

# PHP-Source im Text

 *  Gelöst [jonn10](https://de.wordpress.org/support/users/jonn10/)
 * (@jonn10)
 * [vor 9 Jahren](https://de.wordpress.org/support/topic/php-source-im-text/)
 * Hallo Forum,
    gibt es die Möglichkeit bisher außerhalb on WordPress verwendete
   PHP-Codestückchen in WordPress-Seiten einzubauen?

Ansicht von 13 Antworten – 1 bis 13 (von insgesamt 13)

 *  Moderator [Bego Mario Garde](https://de.wordpress.org/support/users/pixolin/)
 * (@pixolin)
 * Moderator (nicht mehr aktiv)
 * [vor 9 Jahren](https://de.wordpress.org/support/topic/php-source-im-text/#post-41841)
 * Am einfachsten geht das über [Shortcodes](https://codex.wordpress.org/Shortcode_API).
   Beispiel:
 *     ```
       add_shortcode( 'meinphp', 'meinphp_shortcode' );
       function meinphp_shortcode() {
        // beliebigen PHP-Code
        return 'Hallo Welt';
       }
       ```
   
 * (Häufig gemachter Fehler: die Shortcode-Funktion darf nur Inhalte zurückgeben(
   return), nicht ausgeben (echo).)
 * Du kannst PHP auch als [Code Snippets](https://wordpress.org/plugins/code-snippets/)
   hinzufügen. Irgendwo muss es nur ausgegeben werden. Wenn du dazu nicht ein Child
   Theme mit modifizierten Templates anlegen möchtest, sind Shortcodes die einfachste
   Alternative.
 *  Themenersteller [jonn10](https://de.wordpress.org/support/users/jonn10/)
 * (@jonn10)
 * [vor 9 Jahren](https://de.wordpress.org/support/topic/php-source-im-text/#post-41876)
 * Zunächst vielen Dank,
    ich habe die obigen Zeilen genau so in eine Seite eingefügt.
   Wenn ich diese test, so werden diese Originalzeilen angezeigt und nicht „Hallo
   Welt“. Was habe ich da falsch gemacht?
 *  Moderator [Bego Mario Garde](https://de.wordpress.org/support/users/pixolin/)
 * (@pixolin)
 * Moderator (nicht mehr aktiv)
 * [vor 9 Jahren](https://de.wordpress.org/support/topic/php-source-im-text/#post-41877)
 * Wie hast du das eingefügt? Im Seiten-Editor? Dort wird es aus Sicherheitsgründen
   nicht als Code, sondern als Text behandelt. Sonst könnte ja jeder Benutzer beliebig
   Code einfügen.
 * Wie ich schon schrieb, kannst du entweder das Plugin [Code Snippets](https://wordpress.org/plugins/code-snippets/)
   verwenden, es in die `functions.php` eines Child Theme einfügen oder ein eigenes
   Plugin erstellen.
 *  Themenersteller [jonn10](https://de.wordpress.org/support/users/jonn10/)
 * (@jonn10)
 * [vor 9 Jahren](https://de.wordpress.org/support/topic/php-source-im-text/#post-41884)
 * Ein wenig weiter bin ich schon – ich muss hinzufügen, dass WordPress für mich
   Neuland ist im Gegensatz zu html, PHP u.a..
    Habe das Plugin installiert und 
   aktiviert. Dann habe ich über Hinzufügen Deinen Code eingefügt, und jetzt hänge
   ich. Unterhalb von „Übernehmen“ sind Einstellungen auszuwählen: – Snippet überall
   ausführen – Nur im Administrationsbereich ausführen – Nur im Frontend der Website
   ausführen Da habe ich natürlich Angst, etwas kaputt zu machen. Ich möchte ja 
   dieses Snippet nur auf einer bestimmten Seite ausführen. Was muss ich also auswählen
   und wie füge ich es in eine meiner Seiten ein. Viele Fragen, aber leider fand
   ich keine detaillierte Anleitung im Netz Besten Dank im Voraus
 *  Moderator [Bego Mario Garde](https://de.wordpress.org/support/users/pixolin/)
 * (@pixolin)
 * Moderator (nicht mehr aktiv)
 * [vor 9 Jahren](https://de.wordpress.org/support/topic/php-source-im-text/#post-41885)
 * Es gibt in WordPress so genannte _Coditional Tags_, die PHP-Code nur unter bestimmten
   Bedingungen ausführen. Nehmen wir an, du möchtest den Code nur auf der Seite „
   Über uns“ ausführen. Das _Conditional Tag_ dazu lautet
 *     ```
       if ( is_page( 'Über uns' ) ) {
         // dein PHP-Code
       }
       ```
   
 * Nun ist die Frage, was diesen Code auslösen soll. Dazu gibt es verschiedene Möglichkeiten:
    1. Du verwendest eine der von WordPress zur Verfügung gestellten Schnittstellen(
       _Hooks_), z.B. `wp_footer`:
    2.     ```
           add_action( 'wp_footer', 'deine_php_funktion' );
           function deine_php_function() {
             if ( is_page( 'Über uns' ) ) {
             // dein PHP-Code
             }
           }
           ```
       
    3. Du erstellst eine Funktion …
    4.     ```
           function deine_php_funktion() {
             if ( is_page( 'Über uns' ) ) {
               // dein PHP-Code
             }
           }
           ```
       
    5. … und fügst in einem Child Theme an beliebiger Stelle in einem Template den 
       Aufruf der Funktion ein:
        `<?php echo deine_php_funktion(); ?>`
    6. Du erstellst einen eigenen Shortcode …
    7.     ```
           add_shortcode( 'mein_php', 'deine_php_funktion' );
           function deine_php_function() {
             if ( is_page( 'Über uns' ) ) {
             // dein PHP-Code
             }
           }
           ```
       
    8. … und fügst dann im Editor im Inhalt deiner Seite folgendes ein:
        `Lorem ipsum(
       dein Text) … [mein_php] … weiterer Text deiner Seite`
 * Das Plugin [Code Snippets](https://wordpress.org/plugins/code-snippets/) bietet
   dir die Möglichkeit, Code-Snippets (nur) bei Bedarf zu aktivieren. Wenn dein 
   Code nur im Backend arbeitet, braucht er im Frontend nicht aktiviert zu sein –
   deshalb die Frage, wo der Code geladen werden soll. Wenn du also z.B. möchtest,
   dass ein Shortcode (Variante 3) im Frontend durch deinen PHP-Code ersetzt wird,
   aktivierst du ihn ausschließlich fürs Frontend.
 * Mit dem Plugin kannst du eigentlich nicht viel kaputt machen, weil es bei Programmierfehlern
   das Snippet selbst deaktiviert. Trotzdem solltest du bei solchen Änderungen immer
   ein Backup haben und per FTP auf die Dateien auf deinem Webserver zugreifen können.
 *  Themenersteller [jonn10](https://de.wordpress.org/support/users/jonn10/)
 * (@jonn10)
 * [vor 9 Jahren](https://de.wordpress.org/support/topic/php-source-im-text/#post-41892)
 * Vielen Dank für die ausführlichen Erläuterungen.
    Daran habe ich jetzt erst einmal
   zu knabbern. Ich werde mich zunächst auf die Variante 3 konzentrieren. die erscheint
   mir am einfachsten zu sein.
 * Warum aber muss ich abfragen „if ( is_page( ‚Über uns‘ ) ) {….“
    wenn ich das„[
   mein_php]“ nur auf der Seite ‚Über uns‘ einfüge?
 *  Themenersteller [jonn10](https://de.wordpress.org/support/users/jonn10/)
 * (@jonn10)
 * [vor 9 Jahren](https://de.wordpress.org/support/topic/php-source-im-text/#post-41916)
 * Hallo,
    ich habe jetzt folgendes versucht, leider tut es nicht das, was ich will.
 *     ```
       function TextVonBis_shortcode($atts) {
         extract(shortcode_atts( array(
       	    'Text' => 'Text fehlt',
       	    'von'  => '1900-01-01',
       	    'bis'  => '2099-12-31'),
           $atts, 'TextVonBis'));	
         if (date('Ymd') >= $von and date('Ymd') <= $bis)
           return $Text;
       }
       add_shortcode( 'TextVonBis', 'TextVonBis_shortcode' );
       ```
   
 * Auf der Seite:
    `[TextVonBis Text='Hurra es klappt' von='2017-09-20' bis='2017-
   09-25']`
 * Es wird leider nichts angezeigt.
    Dann habe ich 3 returns hinzugefügt, um zu 
   sehen, ob die Parameter übergeben wurden:
 *     ```
       function TextVonBis_shortcode( $atts ) {
       	extract(
       		shortcode_atts(
       			array(
       				'Text' => 'Text fehlt',
       				'von' => '1900 - 01 - 01',
       				'bis' => '2099 - 12 - 31',
       			), $atts, 'TextVonBis'
       		)
       	);
       	return $von;
       	return ' ** * ';
       	return $bis;
       	if ( date( 'Ymd' ) >= $von and date( 'Ymd' ) <= $bis ) {
       		return $Text;
       	} 
       }
       ```
   
 * Es wird aber nur der erste return ausgeführt und 2017-09-20 angezeigt.
    Wo liegt
   mein Anfängerfehler?
    -  Diese Antwort wurde vor 9 Jahren von [Bego Mario Garde](https://de.wordpress.org/support/users/pixolin/)
      geändert. Grund: Code-Auszeichnung korrigiert
 *  Moderator [Bego Mario Garde](https://de.wordpress.org/support/users/pixolin/)
 * (@pixolin)
 * Moderator (nicht mehr aktiv)
 * [vor 9 Jahren](https://de.wordpress.org/support/topic/php-source-im-text/#post-41918)
 * Da haben sich Fehler eingeschlichen.
    - `date('Ymd')` gibt 20170921 zurück und kann schlecht mit 2017-09-21 verglichen
      werden.
    - der logische Vergleichsoperator heißt `&&` und nicht `and`
    - Die Funktion bricht nach dem ersten `return` ab. Wenn du mehrere Werte zurückgeben
      möchtest, musst du sie erst in einer Funktion konkatenieren.
    - Es wäre schön, wenn du die [Coding Standards](https://make.wordpress.org/core/handbook/best-practices/coding-standards/php/)
      einhältst (u.a. kein CamelCase bei Funktionsnamen).
 * Um deinen Code zu debuggen, ist es hilfreich, wenn du die Variablen ausgibst 
   und mit dem erwarteten Ergebnis abgleichst. So kannst du z.B. den ersten Fehler
   vermeiden.
 * Probier mal das hier:
 *     ```
       <?php
       function textvonbis_shortcode( $atts ) {
       	$a = shortcode_atts(
       		array(
       			'text' => 'Text fehlt',
       			'von'  => '1900-01-01',
       			'bis'  => '2099-12-31',
       		), $atts
       	);
   
       	$now   = new DateTime( 'now' );
       	$date1 = new DateTime( $a['von'] );
       	$date2 = new DateTime( $a['bis'] );
   
       	if ( $now >= $date1 && $now <= $date2 ) {
       		return $a['text'];
       	} else {
       		__return_false();
       	}
       }
   
       add_shortcode( 'textvonbis', 'textvonbis_shortcode' );
       ```
   
 * **Korrektur:** `and` ist ein zulässiger Operator (ich sehe ihn allerdings äußerst
   selten).
    -  Diese Antwort wurde vor 9 Jahren von [Bego Mario Garde](https://de.wordpress.org/support/users/pixolin/)
      geändert.
 *  Themenersteller [jonn10](https://de.wordpress.org/support/users/jonn10/)
 * (@jonn10)
 * [vor 9 Jahren](https://de.wordpress.org/support/topic/php-source-im-text/#post-41921)
 * Hi,
    ich bin begeistert über Deine Hilfe und Dein Fachwissen. Vielen Dank!
 *  Moderator [Bego Mario Garde](https://de.wordpress.org/support/users/pixolin/)
 * (@pixolin)
 * Moderator (nicht mehr aktiv)
 * [vor 9 Jahren](https://de.wordpress.org/support/topic/php-source-im-text/#post-41922)
 * Funktioniert das denn nun auch wie gewünscht?
    Dann könntest du noch rasch ein
   Plugin daraus machen. Hört sich viel komplizierter an, als es ist: Du nimmst 
   den Code, packst ihn in eine Datei und setzt oben drüber einen Plugin-Header:
 *     ```
       <?php
       /*
       Plugin Name: Shortcode mit Datum
       Description: Shortcode, der Text ausgibt, wenn das aktuelle Datum in einer vorgegebenen Zeitspanne liegt.
       Author: jonn10
       Version: 1.0
       License: GPL2
       */
   
       if ( ! defined( ABSPATH ) ) {
       	die();
       }
   
       // ab hier dein PHP-Code
       function textvonbis_shortcode( $atts ) {
       	$a = shortcode_atts(
       …
       ```
   
 * Das speicherst du, z.B. als `shortcodemitdatum.php` in einem Verzeichnis `shortcodemitdatum`,
   komprimierst das Verzeichnis als .zip-Datei und installierst es dann über das
   Plugin-Menü. Da Funktionsnamen nicht mehrfach vorkommen dürfen, musst du vor 
   Aktivierung das Code Snippet deaktivieren.
 *  Themenersteller [jonn10](https://de.wordpress.org/support/users/jonn10/)
 * (@jonn10)
 * [vor 9 Jahren](https://de.wordpress.org/support/topic/php-source-im-text/#post-41928)
 * Ja, es funktioniert tadellos!
    Welche Vorteile bringt ein Plugin? Was bedeutet
   das Statement
 *     ```
       if ( ! defined( ABSPATH ) ) {
       	die();
       }
       ```
   
 * ?
 *  Moderator [Bego Mario Garde](https://de.wordpress.org/support/users/pixolin/)
 * (@pixolin)
 * Moderator (nicht mehr aktiv)
 * [vor 9 Jahren](https://de.wordpress.org/support/topic/php-source-im-text/#post-41931)
 * In der Konfigurationsdatei `wp-config.php` wird die Konstante `ABSPATH` mit dem
   absoluten Pfad zu den WordPress-Dateien definiert.
 * Mit `defined( ABSPATH )` wird geprüft, ob die Konstante definiert ist. Im Umkehrschluss
   kann angenommen werden, dass das Plugin nicht von WordPress aufgerufen wird, 
   wenn die Konstante nicht definiert wurde.
 * Durch das if-Statement bricht die Programmausführung direkt ab, wenn das Plugin
   von einem Webseitenbesucher direkt und nicht über WordPress aufgerufen wird (`
   die()`).
 * Hacker versuchen zuerst, möglichst viele Informationen über eine Website herauszufinden.
   Welche Plugins sind installiert, welche davon haben ggf. bekannte Sicherheitslücken.
   Wenn ein Plugin bei direktem Aufruf abbricht, wird statt Informationen nur ein
   leerer Bildschirm angezeigt.
 * Ein eigenes Plugin hat gegenüber Snippets den Vorteil, dass nicht ein weiteres
   Plugin (das Plugin Code Snippets selbst) geladen werden muss. Das spart Arbeitsspeicher
   und verringert die Wartungskosten für die Website. (Plugins, die nicht installiert
   sind, müssen nicht aktualisiert werden. Was nicht aktualisiert werden muss, kostet
   keine Arbeitszeit. Zeit ist Geld.)
 *  Themenersteller [jonn10](https://de.wordpress.org/support/users/jonn10/)
 * (@jonn10)
 * [vor 9 Jahren](https://de.wordpress.org/support/topic/php-source-im-text/#post-41934)
 * Erst einmal danke,
    die Erläuterung über den Vorteil von Plugins habe ich allerdings
   nicht verstanden. Du schreibst: _Ein eigenes Plugin hat gegenüber Snippets den
   Vorteil, dass nicht ein weiteres Plugin (das Plugin Code Snippets selbst) geladen
   werden muss. _ Das Snippet muss geladen werden, im anderen Falle aber doch das
   Plugin. Worin liegt da der Unterschied? Du schreibst: _Das spart Arbeitsspeicher
   und verringert die Wartungskosten für die Website._ Wenn etwas ausgeführt wird,
   muss es doch immer in den Arbeitsspeicher geladen werden? Du schreibst: _Plugins,
   die nicht installiert sind, müssen nicht aktualisiert werden. Was nicht aktualisiert
   werden muss, kostet keine Arbeitszeit_ Wenn ich am Snippet nichts ändere, braucht
   es doch auch nicht aktualisiert werden.

Ansicht von 13 Antworten – 1 bis 13 (von insgesamt 13)

 Das Thema „PHP-Source im Text“ ist für neue Antworten geschlossen.

 * In: [Allgemeine Fragen](https://de.wordpress.org/support/forum/allgemeine-fragen/)
 * 13 Antworten
 * 2 Teilnehmer
 * Letzte Antwort von: [jonn10](https://de.wordpress.org/support/users/jonn10/)
 * Letzte Aktivität: [vor 9 Jahren](https://de.wordpress.org/support/topic/php-source-im-text/#post-41934)
 * Status: gelöst

## Themen

### Beliebteste Themen

### Unbeantwortete Themen

### Nicht-Support-Themen

### Gelöste Themen

### Ungelöste Themen

### Alle Themen
