ワードプレスサイトで問い合わせフォーム機能を実装するために『Contact Form 7』を使うケースは多いと思いますが、迷惑なスパムメールに悩まされることもしばしば。
プラグイン『Akismet』を導入して対策する方法もありますが、個人的にわざわざアカウントを作るのが面倒なので使用していません。
他に『Contact Form 7』には Google が提供する『reCAPTCHA』と連携する機能もあり、こちらもある程度は機能しているのでしょうが、くぐり抜けてくるスパムメールは存在します。
サーバーやメールクライアント側でブロックする方法は、その都度ブラックリストを登録する必要があるため現実的ではありませんし、「何か良い方法はないかな」と思っていたところ下記のエントリーを見つけました。
Contact Form 7 スパムメールの3つの対策(Akismet不要)とメリットデメリットまとめ。 | KodoCode
WordPressプラグイン「コンタクトフォーム」は便利だが、海外からのSPAMメール対策は必須。 サイト/ブログを運営する場合、問い合わせフォームが必要な場合は多いです(Goog...
目次
今回のカスタマイズの前提
- 『Contact Form 7』のメッセージ本文に日本語が含まれていない場合はエラーを返す
- 海外からの顧客を相手にする(英文メールでやり取りする)場合は、今回のカスタマイズの利用は不可
functions.php
を編集できるサイト
『Contact Form 7』のスパムメール対策方法
以下のコードを functions.php
に記述します。
// Contact Form 7 スパムメール対策(本文に日本語が含まれていない場合はエラーを返す)
function wpcf7_validate_spam_message( $result, $tag ) {
$value = str_replace(array(PHP_EOL,' '), '', esc_attr($_POST['your-message']));
if (!empty($value)) {
if (preg_match('/^[!-~]+$/', $value)) {
$result['valid'] = false;
$result['reason'] = array('your-message' => 'エラー:この内容は送信できません');
}
}
return $result;
}
add_filter( 'wpcf7_validate', 'wpcf7_validate_spam_message', 10, 2 );
解説
上記コード内の your-message
は、『Contact Form 7』のフィールドのラベル名となりますので、必要に応じてこちらを書き換えてください。
(デフォルトのままだと、恐らくメッセージ本文のラベル名は your-message
になっていると思います)
仕組みとしては、対象とするフィールドに「日本語が1文字も含まれていない場合にエラーを返す」ものとなるため、大半の海外からのスパムメールはこれだけで撃退できると思います。
日本語が含まれるスパムメールには効果はありませんが、当サイトにおいては今のところうまく機能しています。
その他、『Contact Form 7』関連のカスタマイズは以下のページに掲載しています。
みんな大好き『Contact Form 7』をカスタマイズして最大限に便利に使い倒すためのTips
言わずとしれた超有名プラグイン『Contact Form 7』は、初心者でも簡単にウェブサイトに問い合わせフォームを設置できるスグレモノですが、カスタマイズすることでより便利に利用できるようになります。この記事では、『Contac...