• スポンサードリンク

コメントの投稿欄でタグを無効にしてみた

WordPress

見てくれる人が増えてきたせいか、コメント欄に広告がいっぱい入るようになってきた。
まぁコメントを書いてくれるなら少しはいいかなぁと思ってタグを使えるようにしてたんだけど、コメント無しで広告のリンクだけってのが多いので、コメント投稿欄のタグを無効にしてみることにしました。
備忘録として記事にしときます。

設定したのは次の4項目;

  1. コメント欄にデフォルトで表示されるHTMLタグの案内を非表示にする
  2. コメント欄のオートリンク機能を無効にする
  3. コメント欄に記入できるタグの制限
  4. コメント欄に記入したタグを無効化
  5. 固定ページコメント欄を非表示にする

参考にしたのはこちら。

コメント欄の下にある使えるHTMLタグの案内を消したい
WordPress:コメントフォームをカスタマイズする方法
コメントのHTMLを無効にする
PHPのマニュアル:htmlspecialchars
PHPのマニュアル:htmlentities

1.コメント欄にデフォルトで表示されるHTMLタグの案内を非表示にする

これは簡単。投稿者のWEBサイト情報を非表示にするのと一緒でCSSで非表示にするだけ。

IDやクラスで制限していますが、普通は.form-allowed-tagsに対して適用すればいいみたいです。
ついでに高さも0にセットしときました。

2.コメント欄のオートリンク機能を無効にする

URLを見つけると自動的にリンクを貼るようになっていますが、コメント欄ではそれを無効にしました。
これも簡単でした。functions.phpに1行追加するだけです。

3.コメント欄で使えるタグの制限

allowedtags変数から使用不可にしたいタグをunsetすればいいらしいです。
逆にallowedtags変数に追加すれば使えるタグを増やせるみたいです。
functions.phpに下記を追加しました。

allowedtags変数にセットされていないタグは削除されてしまうようなので、幾つかは残しています。
でもタグの閉じ忘れとかあると困ります。
なので、記入はできるけどタグとしては働かないようにしたいです。それが次の項。どちらが優先されるのかはよくわかってないですが、どちらが先に適用されてもタグを使えなくするという最低限の動作としては問題ないでしょう。

4.コメント欄に記入したタグを無効化

htmlとして認識しないように、テキストに変換すればいいらしいです。
PHPにはこのための関数が3つ程あります。
元ネタでは、htmlspecialcharsを使っていましたが、今回はhtmlentitiesにしてみました。

XSS対策には第2引数のENT_QUOTESが必須です。htmlspecialchars/htmlentitiesとENT_QUOTESを使ってもJavaScriptの場合にはXSSを防げないらしいですが、scriptタグもaタグも削除してしまうので大丈夫でしょう、たぶん。
第3引数・・・エンコードの指定はオプションですが、PHPのオンラインマニュアルでは設定することを推奨しています。PHP5.4.0以降はUTF-8がデフォルトらしいので、書かなくても良いといえばいいんでしょうけど、PHPのマニュアルに、「この引数は表向きには任意指定となっていますが、正しい値を指定しておくことを強く推奨します」と書いてあったので指定しています。
でも、htmlspecialchars も htmlentities も UTF-8のコードを全てエスケープしてくれるわけじゃないみたいなんですよねぇ〜

5.固定ページコメント欄を非表示にする

これはおまけです。
自前で書いているオレオレテーマなので、page.phpから削除しても全然いいんですが、ウロウロしていたら一括で全固定ページからコメント欄を非表示にする方法というのが有ったので、試してみました。

functions.phpに次のコードを書くと一括で非表示になるらしいです。

page.phpを含め不要なところにはそもそもコメント欄表示用のコードを入れないって方が、サーバー負荷軽減で軽いページになるんでしょうけどね。

今回は、大部分がコピペで大したことは書いてないですけど、お疲れ様でした。

« »

  • スポンサードリンク

コメント