it-swarm.com.de

Was ist los mit diesem Code? Ich muss einen Blockquote-Shortcode erstellen

Ich habe einen Shortcode für ein Blockzitat [blockquote]this is the quote[/blockquote] ... das ist der Code.

function shortcode_shortcodetest( $atts, $content = null ) {
    $return = '<div class="blockquotewrapper"><blockquote>';
    $return .= do_shortcode( $content );
    $return .= '</blockquote>';
    $return .= '</div>';
    return $return;
}
add_shortcode( 'shortcodetest', 'shortcode_shortcodetest' );

ich erwarte also eine Ausgabe von:

<div class="blockquotewrapper">
<blockquote><p>this is a test</p></blockquote>
</div> 

oder vielleicht

<div class="blockquotewrapper">
<blockquote>this is a test</blockquote>
</div>

aber was ich bekomme ist:

<div class="blockquotewrapper">
<blockquote>this is a test<p></p></blockquote>
</div>

(Position des öffnenden Absatzes beachten)

Was bewirkt, dass das öffnende p -Tag dorthin verschoben wird, wo es sich befindet? Ich habe bemerkt, dass wenn ich entweder die div oder die blockquote aus der Shortcode-Funktion entferne, es nicht passiert, aber ich wollte den Wrapper aus Styling-Gründen haben und weil ich in der Vollversion eine zugehörige Zitiermöglichkeit habe ... und offensichtlich muss ich das blockquote haben.

2
byronyasgur

Durch Zufall habe ich gerade herausgefunden, was es war, und ich denke, ich lasse dies hier, da es möglicherweise jemandem in der Zukunft helfen wird. Einige Webseiten, einschließlich einer Antwort auf diese Frage schlagen vor, den folgenden Code zu verwenden, um zu verhindern, dass wpautop erst nach den Shortcodes ausgeführt wird. Jetzt war ich nicht in der Lage diesen Code vollständig zu verstehen, aber ich hatte ihn in meiner functions.php und aus welchem ​​Grund auch immer, es war die Ursache für das Obige.

remove_filter( 'the_content', 'wpautop' );
add_filter( 'the_content', 'wpautop' , 12);
3
byronyasgur

Ein Blick auf den Codex zeigt, dass WordPress doppelte Zeilenumbrüche im Inhalt automatisch in Absatz-Tags umwandelt. Der Code, den Sie in die functions.php eingegeben haben, deaktiviert dies. Dies ändert sich auf jeder Seite Ihrer Website.

Eine bessere Lösung könnte darin bestehen, die Funktionsweise Ihres Funktionscodes zu überprüfen. Höchstwahrscheinlich wird am Ende der Ausgabe ein Leerraum ausgegeben. Mabey eine leere Zeile am Ende der HTML-Ausgabe vor einem <?php Tag?

?>

output some html here....               (one line end here)
                                        (one line end here)
<?php
some other functions here...

Was Sie haben, wird wahrscheinlich hier funktionieren, aber es wird die Ausgabe aller Ihrer Seiten verändern. Ich bezweifle, dass Sie das im Sinn hatten.

0
Chris Strutton