WordPress の記事やコメントの「連続した改行部分」に自動で挿入される<p>
タグを消す件です。すでにどちらさまもremove_filter
でwpautop
を無効にしたりしてると思うんですが、今回はコメントからそもそもの改行を取り除いたメモです。
ググッてみた結果ですが、とりあえずは「フィルターを無効にする」が主な対策かと思います。
remove_filter( 'the_content', 'wpautop' );
remove_filter( 'the_excerpt', 'wpautop' );
という具合にwpautop
フィルターを無効にします。これで投稿の際、記事や抜粋に自動で<p>
タグが入らなくなります。
関数リファレンス_wpautop - WordPress Codex 日本語版
ただ、Codex にも
> WordPress はこの関数を投稿や固定ページの本文と抜粋のフィルターに使用します。
とあるんですが、テーマのせいなのか何なのか、コメントでも wpautop
が効いてしまっていました。
ちゃんと調べれば、コメントのwpautop
フィルターを呼ばないようにできるかもしれないんですが、「そもそもコメントに改行の連打をされるのはイヤ」なので、コメントについてはHTMLもダメにして連続した改行そのものを取り除くことにしました。
テーマの functions.php に
function comment_htmlize ( $str ) {
if ( get_comment_type() != 'comment' ) return $str
// HTMLエスケープ
$str = htmlspecialchars($str, ENT_QUOTES);
// Pタグの自動挿入を防ぐ ※ 連続する改行(前後のタブorスペースも)を消す
$str = preg_replace ( '/(?:[\s\t]*(?:\rn|\n|\r)[\s\t]*){2,}/', "\n", $str );
return $str;
}
add_filter( 'comment_text', 'comment_htmlize', 9); // コメント
add_filter( 'comment_text_rss', 'comment_htmlize', 9); // フィードで使われるコメント内容
add_filter( 'comment_excerpt', 'comment_htmlize', 9); // コメントの抜粋
を書いてコメントを洗うようにしました。
連続する改行の前後にタブやスペースが混じっていてもうまく<p>
タグが挿入されていたので正規表現で改行の置換を行います。関数では、htmlspecialchars
でHTMLエスケープした後、「周りにタブかスペースが混じっているかもしれない改行が2個以上連続」の検索パターンを「一つの改行」に置換して文字列を返します。
もともとPerlに慣れているので、PHPやJavaScriptでは正規表現では少し苦労しますが、もっといい方法があれば教えていただければと思います。