見出し画像

WordPressで短時間の連続投稿を規制してみる

wordpressを運営していくと気になるのがスパムコメント。
いわゆるBOTみたいなのはCAPCHAプラグインを導入すれば良いんですけどもね。例えば手動で大量投稿するような、悪い意味で熱心な方はなかなか防げないもの。

かといってIPアドレス等でアクセス規制しちゃうと巻き添えもありますしね……。
あとSEO的にもコメント投稿されるのはユーザー行動としてみてもプラスではないのかな、と考えるとコメント欄閉鎖まではチョット。

投稿間隔を規制してみる

いわゆる2ちゃんねる時代から行われていた簡便な方法です。一度投稿するとしばらく待たないと次の投稿ができなくなるというもの。

Cocoon含めてテーマにはそれぞれ独自の機能があるようなんですが、もっと柔軟にメッセージや時間を設定したい!ということでコードを記述してみました。

コードはこちら

以下のコードを一番下に貼り付けるだけ。時間とメッセージは最大文字数は適宜調整してください。

//----------------------------------------------------------
// 同一IPからの連続投稿を制限する
//----------------------------------------------------------

add_filter('preprocess_comment', 'block_consecutive_comments', 10, 1);
function block_consecutive_comments($comment_data) {
    $ip = $_SERVER['REMOTE_ADDR'];
    $last_comment_time = get_transient('last_comment_time_' . $ip);
    $current_time = time();
    $waiting_period = 360; // 待機時間(秒単位)

    if ($last_comment_time && ($current_time - $last_comment_time) < $waiting_period) {
        wp_die('連続投稿ですか?しばらく経ってから投稿してね');
    }

    set_transient('last_comment_time_' . $ip, $current_time, $waiting_period);

    return $comment_data;
}

上記コードでは360秒、6分に設定しています。もう少し短くても良いのかも。


Cocoon+子テーマ使用

当方、Cocoon環境なので他のテーマでの動作は分かりません。
※予期せぬ動作をする可能性があります。自己責任で。

貼り付け場所はテーマファイルエディター→編集するテーマ「Cocoon Child」→テーマのための関数(function.php)

実装例

うちのサイトで実装してみました。

https://pepar.net/

仮に60秒とするとこんな感じに。時間を開けると投稿できますが……


1回目の投稿後、すぐに再投稿しようとするとこんな感じにストップがかかります。

古の2ちゃんねるとか電子掲示板、BBS時代を彷彿とさせるメッセージを入れても面白いかもしれませんね。「とりあえずモチツケ」みたいな。



エラーがでる

Exception thorw without a stack frame

function.phpの編集時、日本語入力モードで書き換えるとエラーが出るっぽいです。全角入力→半角変換でも駄目なことも。
メモ帳で修正して貼り付けるなら大丈夫だったりします。
あと定番ですが全角スペースがないかも要チェック。


さくらサーバのWAFもオフに

 さくらサーバのセキュリティであるウェブアプリケーション・ファイアウォールの効果でfunction.phpの書き換えがロックされます。
一時的にオフにして書き換えを行ってください。

プラグインでもいいですけれど

おそらく同様の機能があるWPプラグインは存在するはずですが、そういうのって機能が多すぎたりデータベースに跡を残したりするんですよね。
今回のコードは単純に文字数で条件分岐させるだけ。非常に軽量でシンプルな機能しかありません。でも逆に余計なものは残さない、データベースを汚さないという点ではメリットはあるんじゃないかなーと思います。


この記事が気に入ったらサポートをしてみませんか?