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
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";
}
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";
}
13836300cookie-checkWordPress-Shortcodes an der falschen Stelleyes
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