web-dev-qa-db-ja.com

このコードの何が問題になっています

ブロッククォートのショートコードがあります[blockquote]this is the quote[/blockquote] ...これがコードです。

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' );

それで、私は以下の出力を期待するでしょう:

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

または多分

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

しかし私が得るものは:

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

(冒頭段落タグの注記位置)

開始pタグが移動する場所に移動している原因ショートコード関数からdivblockquoteのどちらかを削除してもそれが起こらないことに気づきましたが、スタイルの理由からラッパーを使いたいと思いました。明らかに私はブロッククォートを持つ必要があります。

2
byronyasgur

偶然にそれが何であるかを発見したばかりなので、将来誰かに役立つかもしれないのでこれをここに残すと思います。この質問への答え を含むいくつかのWebページ は、ショートコードの後までwpautopが実行されないようにするために次のコードを使用することをお勧めします。今私はこのコードを完全に理解することができませんでした、しかし私は私のfunctions.phpの中でそれを持っていました、そしてそれが上記の原因である理由は何でも。

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

コーデックス を見ると、WordPressが自動的にコンテンツの二重改行を段落タグに変更していることがわかります。 functions.phpに入れたコードはこれを無効にします。これはあなたのサイトのすべてのページでこれを変えるでしょう。

より良い解決策はあなたのショートコード機能をチェックすることかもしれません。ほとんどの場合、出力の最後に空白がいくつか出力されます。 HTML出力の最後の<?phpタグの前に空白行を作る

?>

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

あなたが持っているものはおそらくここでうまくいくでしょうが、それはあなたのすべてのページの出力を変えるでしょう。それはあなたが念頭に置いていたことではないでしょうか。

0
Chris Strutton