ブロッククォートのショートコードがあります[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
タグが移動する場所に移動している原因ショートコード関数からdiv
かblockquote
のどちらかを削除してもそれが起こらないことに気づきましたが、スタイルの理由からラッパーを使いたいと思いました。明らかに私はブロッククォートを持つ必要があります。
偶然にそれが何であるかを発見したばかりなので、将来誰かに役立つかもしれないのでこれをここに残すと思います。この質問への答え を含むいくつかのWebページ は、ショートコードの後までwpautopが実行されないようにするために次のコードを使用することをお勧めします。今私はこのコードを完全に理解することができませんでした、しかし私は私のfunctions.phpの中でそれを持っていました、そしてそれが上記の原因である理由は何でも。
remove_filter( 'the_content', 'wpautop' );
add_filter( 'the_content', 'wpautop' , 12);
コーデックス を見ると、WordPressが自動的にコンテンツの二重改行を段落タグに変更していることがわかります。 functions.phpに入れたコードはこれを無効にします。これはあなたのサイトのすべてのページでこれを変えるでしょう。
より良い解決策はあなたのショートコード機能をチェックすることかもしれません。ほとんどの場合、出力の最後に空白がいくつか出力されます。 HTML出力の最後の<?php
タグの前に空白行を作る
?>
output some html here.... (one line end here)
(one line end here)
<?php
some other functions here...
あなたが持っているものはおそらくここでうまくいくでしょうが、それはあなたのすべてのページの出力を変えるでしょう。それはあなたが念頭に置いていたことではないでしょうか。