【WordPress】the_content() や複数行テキストで改行が反映されない時の対処法

  • WordPress

WordPress のウィジウィグエディターや、カスタムフィールドで複数行テキストエリアなどを作った時、内容をサイトに表示させてみると改行が反映されないことがあります。これは、wpautop()nl2br()の関数でラップすることで解決できます。

wpautop()

1行の改行はbrタグ2行の改行はpタグに囲まれます。
そのため親要素はdivなどにしておかないと、pタグをpタグで囲む可能性があります。これは HTML のコーディング規約違反になるので注意しましょう。

p タグが出力される可能性があるので、これはダメ!
<p>
    <?= wpautop( get_the_content() ) ?>
</p>

ただウィジウィグエディターの出力ではこちらはデフォルトで入るようになっています。何もしていないのに改行が反映されていないなら、元々 functions.php 等で wpautop のフィルターを外しているか、プラグインの影響による可能性が高いです。

nl2br()

改行がすべてbrタグに変換されます。pタグを生成したいかどうかでどちらにするか決めるとよいと思います。困ったらwpautop()でいいかなと思います。

実際の使用例

// コンテンツを表示する例
echo wpautop( get_the_content() );

// カスタムフィールド text01 を表示する例
echo nl2br( get_post_meta( get_the_ID(), 'text01', true ) );