コメントフォームのところ、こんなの表示されてますよね。
次のHTML タグと属性が使えます:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>
これ以外のタグはすっぱり削除されてしまうんですが、例えばコメント欄でHTMLのコードについて議論した事もあるだろうし、削除じゃなくてエスケープして出力するようにしたいですね。(というか勝手に削るなよ、と言いたい。)
あと空行を見つけるとそこで区切って<p>
〜</p>
にされるけど、これも改行は全部改行のまま出力したい。
要は概ね書いたまま表示するようにしたい、と。まあ空白くらいは詰めてもいいけど、普通の掲示板風の動きにしたいわけです。
フィルターで独自に置換
どうもフィルターを使う事でうまくやれるみたい。
というわけでfunctions.php
に追加。
function html_to_text($s) { if ( get_comment_type() == 'comment' ) { $s = str_replace("\r\n", '‌<br />', htmlspecialchars($s, ENT_QUOTES)); } return $s; } add_filter('comment_text', 'html_to_text', 9);
ENT_QUOTES
はなくてもいいかもだけど、まあここは定型文という事でひとつ。
改行は、br
要素の連続もp
の区切りとして認識されてしまったので、nl2br()
が使えない。そこでstr_replace()
で「幅のない空白」‌
を一緒に設置しながらbr
を追加する事で、それを回避するようにしました。
あとはデフォルトのエスケープ系処理より先に置換させるため、優先度9
を指定してadd_filter()
してやります。
デフォルトのエスケープ処理みたいなのはどうやってremove_filter()
するのかがよくわからなかった。まあ他にもnull削除とかやってるみたいだし、残しておいてもいいんじゃないかな。
注釈変更
最後にcomments.php
で、フォーム出力のところの注釈を変更。
<?php comment_form('comment_notes_after=タグは使えません。改行はそのまま表示されます。'); ?>
これでOK。