WordPressコメント投稿の修正
WordPressはコメントを受け付ける部分と、コメントを処理する部分が別プログラムになっている。
受付は「\wp-content\themes\」の指定テーマフォルダにある「comments.php」である。
入力されたコメントの処理はWordPressフォルダ直下の「wp-comments-post.php」が行う。
どう対応したかというと・・・
1 コメント処理の名前を変える
2 入力されたコメントであることを確認する
3 日本語が含まれない場合はSPAMとする
4 元の名前のプログラムは別URLへ転送する
1だけでも自動登録は蹴れると思うが、2を入れることでより確実にする。
最初からちゃんとリファーラーチェックは入っているが、そういうSPAMツールはリファーラーもセットしてくるので、別のチェック用データを入れなければならない。
2はクエリ文字列でもいいし、hiddenデータでもいいが、hiddenの方が後で楽である。
3は日本語(全角)がひとつも入っていない場合にSPAMとするものだ。
ちゃんと注意書きも付けておけば普通のコメントには差し支えない。(日本語の注意書きだけ)
SPAMとしてマークなどではない。
不愉快なので、入力内容を全部消して、登録者とコメントに「SPAM」と入れる。
同じ内容のコメントはエラーになるので、放っておいても、複数のSPAMが登録されることはない。
4はおまけ。
以下、修正内容を書くが、あまりに素人が触ると何をしでかすか分らない。
phpやHTMLが解る人が対象である。
そのため、詳しいコードは書いていない。
解る人ならこれで十分だからだ。
comments.phpの修正箇所は3箇所。
適当(適切)な場所に日本語がないと受け付けられないという注意書きを入れる
formのactionの飛び先の名前を変える。
formの中にhidden属性で、何かチェック文字列を入れておく。
わざわざ解析したりしないだろうから、何でもいい。
wp-comments-post.phpの方は、コピーして別の名前(上で書いた名前)にする。
wp-comments-post.phpの中身は適当なところへのジャンプにした。
例:header(“Location: http://www.google.com/”);
最後に新しいcomments-post.phpの修正である。
まず、上で追加したチェック文字列もPOSTするようにする。
$comment_contentに日本語(全角)が存在しない場合およびチェック文字列が正しくない場合、POSTから拾ったデータをクリアする。
投稿者を「SPAM」にして、コメント内容も「SPAM」にし、その他はnullにした。
コメントを「あぼ~ん」にしてもいいが・・・
これでかなり不愉快な内容を見ずに済むだろう。
で、思いついたのだが、コメントに入れられたリンクを無効にする機能が欲しい。
突然ですが、クイズです。
リンクを無効にする一番簡単な方法は何でしょうか?
答えはコメント欄に。
(タイトルをクリックすると表示される)
クイズの答え
「Aタグ」を「/Aタグ」に置換すると、リンクとして表示されなくなる。
/aタグで囲まれることになるが、WordPressが不正なタグとして削除するようで、
前後のタグとも出力されなくなるので好都合である。
(不正なタグがあると画面が崩れるからチェックしているようだ)
具体的なコード例
$wk = str_ireplace(“<A “, “</A “, $comment_content);
if($wk) $comment_content = $wk;
str_ireplaceは大文字・小文字に関わらず置換する関数で、置換対象がないとFalseが返る。
このため、一旦ワークに入れて、Falseでなかったら文字列を入れ替えている。
まあ、正規表現でもいいのだが、「簡単」なのはこれだろうということで。