Shortcode hinterlässt keinen Platz für andere Elemente?
-
16-10-2019 - |
Frage
Ich habe meinen eigenen Shortcode erstellt. Ich kann den Code leider nicht teilen;/
Wenn ich es auf meinen Seiten benutze, verhält es sich seltsam. Es hat immer die höchste Priorität. Ich meine so etwas im Page -Editor:
Text
[shortcode]
Ausgänge auf der Seite:
< shortcode contents >
Text
Und dies in Page Editor:
[shortcode]
Text
[shortcode]
Gibt:
< shortcode contents >
< shortcode contents >
Text
Ich kann also nichts vor und zwischen meine Shortcodes setzen.
Um mehr zu sagen, verwenden meine Shortcodes ein paar IFs, foreachs und eine Schleife (sie greifen und zeigen Daten vom benutzerdefinierten Post -Typ an).
Irgendwelche Ideen, warum es glücklich ist?
bearbeiten
OK, also habe ich Echos anstelle der Rückkehr verwendet. Mein Fehler. Gibt es eine Möglichkeit, meine gesamte Funktion zurückzugeben, ohne jede einzelne Zeile zu bearbeiten und $ output usw. hinzuzufügen?
Lösung
Ich denke, Ihr Problem ist, dass Ihr Shortcode es ausgibt, anstatt es zurückzugeben.
Entfernen Sie also in Ihrer Shortcode -Funktion jede direkte Ausgabe (dh zwischen den Zeugnissen zwischen ?>.....<?php
und alle echo
s und sammeln Sie lieber Ihre Ausgabe in einer Variablen und geben Sie das zurück:
function my_shortcode_cb($atts) {
....
$output = ....
$output .= ....
return $output;
}
Mehr Details:
Also statt
while ($a != $b) {
echo "<ul>";
if ($c == $d) {
foreach ($e as $k => $v) {
?>
<li class="item-<?php echo $k; ?>"><?php echo $v; ?></li>
<?php
}
}
echo "</ul>";
}
Sie machen:
$output = '';
while ($a != $b) {
$output .= "<ul>"
if ($c == $d) {
foreach ($e as $k => $v) {
$output .= "<li class=\"item-".$k."\">".$v."</li>";
}
}
$output .= "</ul>";
}
return $output;
Oder wenn du billig sein willst ;-), kannst du das tun:
ob_start();
while ($a != $b) {
echo "<ul>";
if ($c == $d) {
foreach ($e as $k => $v) {
?>
<li class="item-<?php echo $k; ?>"><?php echo $v; ?></li>
<?php
}
}
echo "</ul>";
}
return ob_get_clean();
BTW: Wenn Ihr Shortcode -Rückruf sehr lang sehr lang ist, besteht die Möglichkeit, dass es ein großes Potenzial für das Refactoring hat. Und wenn Sie dies tun würden, besteht die Möglichkeit, dass Sie Ihre Ausgabe von Saiten zusammenstellen würden, die durch Funktionsaufrufe sowieso zurückgegeben wurden.