WordPress-Shortcodes an der falschen Stelle

Lesezeit: 3 Minuten

Benutzer-Avatar
zbyshekh

Ich mache ein WordPress-Plugin und möchte Shortcodes verwenden, um einen ziemlich großen Code in den Beitrag einzufügen. Ich habe diesen einfachen Code, der mein Problem simuliert

function shortcode_fn( $attributes ) {
    wanted();
    return "unwanted";
}
add_shortcode( 'simplenote', 'shortcode_fn');

function wanted(){
    echo "wanted";
}

und mit diesem Inhalt posten

start
[simplenote]
end

das ergibt dieses Ergebnis:

wanted
start
unwanted
end

und ich möchte, dass es “gewünschten” Text zwischen Anfang und Ende einfügt. Ich weiß, die einfachste Lösung wäre, einfach “wanted” in Wanted() zurückzugeben, aber ich habe bereits alle diese Funktionen und sie sind ziemlich groß. Gibt es eine einfache Lösung, ohne alles von Grund auf neu zu schreiben?

@edit: Vielleicht gibt es eine Möglichkeit, alle Echos von der Funktion in einer Zeichenfolge zu speichern, ohne sie zu drucken?

  • Ich glaube nicht, dass es einen Ausweg gibt, da die Funktionen zum Generieren der Shortcode-Ausgabe vor der Ausgabe des Seiten-/Post-Inhalts ausgeführt werden, weshalb oben in Ihrem Beispiel gezeigt wird, warum.

    – Prahlerei

    28. April 2014 um 6:59 Uhr

Eine einfache Problemumgehung ist die Verwendung Ausgabesteuerung Funktionen:

function shortcode_fn( $attributes ) {
    ob_start(); // start a buffer
    wanted(); // everything is echoed into a buffer
    $wanted = ob_get_clean(); // get the buffer contents and clean it
    return $wanted;
}

  • Ich habe es getan, und es funktioniert teilweise. Text ist zwischen Start und Ende sichtbar, druckt aber auch Funktion vor Start. Gibt es eine Möglichkeit, es zu unterdrücken?

    – zbyshekh

    28. April 2014 um 8:42 Uhr

  • Es sollte unterdrückt werden. Dies ist der Originalcode: eval.in/143153 Ergebnis: gewollter Start ungewolltes Ende Dies ist mit Ausgangspufferung: eval.in/143155 Ergebnis: Anfang gewollt unerwünschtes Ende

    – Ruslan Bes

    28. April 2014 um 9:09 Uhr


  • Es funktioniert, mein Fehler 🙂 Ich habe stattdessen ob_get_content verwendet, jetzt funktioniert es perfekt

    – zbyshekh

    28. April 2014 um 9:30 Uhr

  • vielen Dank, das hat mir Zeit gespart

    – Laks

    8. Februar um 12:49 Uhr

Benutzer-Avatar
Rambu

Folge diesem Link http://codex.wordpress.org/Shortcode_API#Overview

Wenn the_content angezeigt wird, analysiert die Shortcode-API alle registrierten Shortcodes wie “[myshortcode]”, trennen und analysieren Sie die Attribute und den Inhalt, falls vorhanden, und übergeben Sie sie an die entsprechende Shortcode-Handler-Funktion. Jede zurückgegebene Zeichenfolge (kein Echo) vom Shortcode-Handler wird anstelle des Shortcodes selbst in den Post-Body eingefügt.

Damit alle Shortcode-Funktionen zurückgegeben werden müssen, können Sie Ihre Funktion „gesucht“ wie folgt ändern:

function wanted(){
    return "wanted";
}

Benutzer-Avatar
Matt Gibson

Der Standardweg von WordPress wäre, zwei Funktionen bereitzustellen. Einer, get_wanted() möchten Rückkehr die gesuchte Zeichenfolge; das andere, wanted()ist nur:

function wanted() {
    echo get_wanted();
}

Sie können also beides tun, haben aber nur den Großteil des Codes an einem Ort. Dies ist ein gängiges Muster in WordPress, z the_title() gegen get_the_title().

Wie @Ruslan erwähnt, wäre die Standardmethode, ohne Ihre vorhandene Funktion zum Erstellen einer Zeichenfolge neu zu schreiben, die Verwendung der Ausgabesteuerung.

Unter Verwendung der Antwort von Ruslan Bes sieht der Code so aus:

function shortcode_fn( $attributes ) {
    ob_start(); // start a buffer
    wanted(); // everything is echoed into a buffer
    $wanted = ob_get_clean(); // get the buffer contents and clean it
    return $wanted;
}

add_shortcode( 'simplenote', 'shortcode_fn');

function wanted(){
    echo "wanted";
}

1383630cookie-checkWordPress-Shortcodes an der falschen Stelle

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy