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?

War es hilfreich?

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 echos 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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit wordpress.stackexchange
scroll top