PHP-Code und Reihenfolge der Darstellung auf Seite

  • Liebes Forum,

    ich möchte auf einer Seite eigenen PHP-Code ausführen. Der tatsächlich Code ist recht komplex und hat hier nichts verloren, denn ich habe zunächst ein ganz einfaches Problem:

    Wenn ich eine Seite erstelle und an einer bestimmten Stelle den Code aufrufe, erscheint die Ausgabe des Codes immer am Anfang des Seiteninhalts und nicht dort, wo ich ihn eingefügt habe.

    Ich nutze zum Testen sowohl PHPCode Snippets von XYZScripts als auch die die Erweiterung meiner functions.php, in welche ich z. B. schreibe:

    Code
    function daniel_test( $atts ) {
    	return "Daniel Test: ".wp_list_pages('sort_column=menu_order');
    }
    add_shortcode( 'danieltest', 'daniel_test' );


    Egal, auf welche Art ich dann auf einer Seite den Shortcode hinzufügen möchte, also z. B.

    erscheint die Ausgabe der Funktion wp_list_pages() ÜBER dem "Test 1" in diesem Beispiel, wobei der einfache String "Daniel Test: " an der richtigen Stelle erscheint.

    Ich entwickle die Seite auf aktuellem macOS mit aktuellem MAMP, PHP 7.0 ohne Cache und Apache. Auch WP und alle Plugins etc. sind aktuell.

    Was mache ich falsch?

    Ich danke euch im Voraus!
    Daniel

    • 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


  • Ich nutze zum Testen sowohl PHPCode Snippets von XYZScripts als auch die die Erweiterung meiner functions.php, in welche ich z. B. schreibe:

    Code
    function daniel_test( $atts ) {
    	return "Daniel Test: ".wp_list_pages('sort_column=menu_order');
    }
    add_shortcode( 'danieltest', 'daniel_test' );

    einfach dafür sorgen, das die Funktion nicht die Ausgabe per echo an den Browser sendet, sondern dir zur "späteren" Ausgabe zurück gibt

    \wp-includes\post-template.php (1 hit)
    Line 1168: function wp_list_pages( $args = '' ) {

    Code
    if ( $r['echo'] ) {
    		echo $html;
    	} else {
    		return $html;
    	}


    https://developer.wordpress.org/reference/functions/wp_list_pages/

    also echo = false pp echo = 0 Standardwert ist 1

    Mit offenen Augen träumen

  • Danke r23 für die schnelle Antwort!

    Soweit fast klar, in meinem Fall aber komme ich damit noch nicht weiter. Vielleicht war das Beispiel mit wp_list_pages() etwas unglücklich.

    Mein eigentliches Problem besteht darin, dass ich an genannter Stelle mit include eine Datei einbinden möchte (hinter der dann noch viele andere stecken) und in den Dateien schlussendlich HTML und CSS steht. Dazwischen stehen hin und wieder noch echos, damit berechnete Werte ausgegeben werden können.

    Hier steht das eingebundene HTML dann ganz vorne im Seiteninhalt und nicht an der Stelle, wo ich include aufrufe. Ich brauche also eine Möglichkeit, wie ich den ganzen include und alles, was dort ausgegeben wird, "hinten anstellen" kann oder zur späteren Ausgabe zurückgebe.

    So verständlicher?

    Ich danke euch im Voraus!
    Daniel

  • Wie schon beschrieben, die Ausgabe der Funktionen darf nicht direkt in den Browser gehen, sonst erscheint sie ganz oben oder an anderer unerwünschter Stelle in der Seite, sondern sie muss gesammelt am Ende des Shortcodes per return zurückgegeben werden, z.B. so:

    PHP
    function daniel_test( $atts ) {
        ob_start();
        echo "123";
        echo "Daniel Test";
        include( get_stylesheet_directory() . '/myincludes/myfile.html' );
        return ob_get_clean();
    }
    add_shortcode( 'danieltest', 'daniel_test' );

    Um direkt ausgegebene Ausgaben "einzufangen", wird hier ein eigener Output-Buffer angelegt und dessen Inhalt am Ende gesammelt zurückgeben, mehr dazu hier.

    Einmal editiert, zuletzt von b3317133 (28. Mai 2017 um 18:29)


  • Mein eigentliches Problem besteht darin, dass ich an genannter Stelle mit include eine Datei einbinden möchte (hinter der dann noch viele andere stecken) und in den Dateien schlussendlich HTML und CSS steht. Dazwischen stehen hin und wieder noch echos, damit berechnete Werte ausgegeben werden können.

    Wenn deine "Datei" eine URL hat - würde ich diese vermutlich mit Snoopy einlesen.

    https://github.com/endroy/Snoopy


    Ich brauche also eine Möglichkeit, wie ich den ganzen include und alles, was dort ausgegeben wird, "hinten anstellen" kann oder zur späteren Ausgabe zurückgebe.

    Sicher, dass du include verwenden möchtest?
    http://php.net/manual/de/function.include.php

    und nicht file-get-contents...
    http://php.net/manual/en/function.file-get-contents.php

    oder was anderes sinnvolles

    Mit offenen Augen träumen

Jetzt mitmachen!

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