Support » Plugins » eigenes Plugin gibt immer eine 1 mit aus

  • Gelöst berndhs

    (@berndhs)


    Hallo zusammen,
    ein eigenes Plugin für shortcode gibt immer am Ende eine 1 mit aus.

    <?php
        /*
         Plugin Name: Meine eigenen PHP-Scripte
         Plugin URI: https://altmarkweb.de/webdesign-salzwedel-neue-homepage-von-altmarkweb/
         Description: Dieses Plugin verwaltet die eigenen PHP-Scripte
         Author: Bernd Schulz
         Author URI: https://altmarkweb.de/webdesign-salzwedel-neue-homepage-von-altmarkweb/
         Version: 1.0.0
         License: free
         */
        
        // Direkten Aufruf verhindern
        if ( ! defined( 'WPINC' ) ) {
            die();
        }
        
        /* Shortcode */
        function testen() {
            $cont = include("testen.php");
            return $cont;
        }
        add_shortcode("meincode_testen", "testen");
    ?>

    testen.php

    <?php
        echo "Hallo, was los<br />";
    ?>

    In der Ausgabeseite steht der Text und dann eine 1.
    Habe noch weitere shortcode mit DB-Abfrage, überall wird zum Schluß eine 1 angehangen.
    Wo liegt der Fehler?
    Gruß Bernd

Ansicht von 2 Antworten - 1 bis 2 (von insgesamt 2)
  • Bevor WordPress den Inhalt von Beiträgen und Seiten ausgibt, durchsucht es den Text nach Shortcodes in eckigen Klammern und ersetzt den Shortcode mit der durch die Shortcodefunktion zurückgegebenen Zeichenkette. Die Funktion darf keinen Inhalt mit echo ausgeben, weil die Ausgaben dann erfolgt, bevor WordPress alle Shortcodes abgearbeitet und den Text gerendert (also z.B. auch bei Zeilenumbrüchen im Text AbsatzTags hinzugefügt) hat.

    Deine Datei testen.php gibt aber nun (vorzeitig*) einen Wert mit echo aus.
    (* Wenn du den Shortcode irgendwo mitten im Text eines Beitrags oder einer Seite platzierst, dürfte der mit echo ausgegebene Text an der falschen Stelle stehen.)

    Die Funktion include bindet eine PHP-Datei ein und gibt bei Erfolg den Wert 1 zurück, bei Misserfolg den Wert 0. Wenn du mit $cont = include("testen.php"); der Variable $cont den Rückgabewert der Funktion include zuweist und diese dem Shortcode mit return zurückgibst, wird richtig der Wert 1 ausgegeben.

    Was du möchtest, sieht vermutlich so aus:

    //testen.php
    <?php 
    function say_hello() {
      return 'Hallo Welt';
    }
    <?php
       /*
        * Plugin Name: Meine eigenen PHP-Scripte
        */
     
        // Direkten Aufruf verhindern
        if ( ! defined( 'WPINC' ) ) {
            die();
        }
        
        include('testen.php');
    
        // Shortcode [meincode_testen]
        add_shortcode('meincode_testen', 'say_hello');

    Noch kurz ein Tipp zu schließenden PHP-Tags aus der Dokumentation:

    Enthält eine Datei nur PHP-Code, ist es besser, den schließenden PHP-Tag am Ende der Datei wegzulassen. Das verhindert, dass versehentlich Whitespace oder Zeilenumbrüche nach dem schließenden PHP-Tag hinzugefügt werden, die unerwünschte Auswirkungen haben können, da PHP das Puffern der Ausgabe beginnt, auch wenn der Programmierer keinerlei Absicht hatte, irgendwelche Ausgaben an dieser Stelle des Scripts zu senden.

    Quelle: https://www.php.net/manual/de/language.basic-syntax.phptags.php

    Thread-Starter berndhs

    (@berndhs)

    Danke für die schnelle Antwort.
    Ich binde eigene umfangreiche Scripte mit DB-Abfragen und FastTemplate ein, der Aufruf erfolgt dann durch Shortcode.
    Beispiel

    $dir = __DIR__."/";
    require_once($dir."sql.inc.php");
    require_once($dir."Classes/FastTemplate.class.php");
    require_once($dir."Classes/db.class.php");
    require_once($dir."Classes/HttpRequest.class.php");
    require_once($dir."Classes/Gewerbeverz.php");
    
    $Request = new HttpRequest();
    
    $TPL = new FastTemplate($dir."templates/gewerbe");
    $TPL->no_strict();
    
    $gewerbe = new Gewerbeverz($TPL, $Request);
    
    //echo $gewerbe->ShowBranche();
    echo $gewerbe->ShowOrte();
    echo $gewerbe->ShowFirmennamen();
    
    if($Request->get("bid")) echo $gewerbe->ShowFirmen();
    if($Request->get("ort")) echo $gewerbe->ShowFirmen();
    if($Request->get("fid")) echo $gewerbe->ShowFirmen();

    Da habe ich wohl ein Problem.

Ansicht von 2 Antworten - 1 bis 2 (von insgesamt 2)
  • Das Thema „eigenes Plugin gibt immer eine 1 mit aus“ ist für neue Antworten geschlossen.