WordPress に問い合わせフォームを設置する際の定番プラグイン「Contact Form 7」について、お手軽にスパム対策する方法をご紹介します。
対象としている人
-
Contact Form 7 経由のスパムメールに悩まされている
-
日本人のみを対象としたサイトを運営している
-
手間はかけたくない
-
FTP(SFTP,FTPS)の使い方ぐらいは分かる
-
文字コードという言葉ぐらいは何となく分かる
動作原理的なこと
- スパムの大半は海外からのもの
- であれば、
<textarea>
内に書かれる本文が日本語のひらがなを含んでいなければ、エラーにすればいい
- であれば、
という非常に単純なものです。
本気で対策したいのであれば、Akismet のようなスパム対策用プラグインとの連携や画像認証の導入等を検討してください。
編集対象ファイル
wp-content/themes/XXXXX/functions.php
- XXXXX:現在使用中のテーマファイルに対応したディレクトリ
- XXXXX-child のように子テーマを作ってる場合は、子テーマ内の方の
functions.php
を編集してください。
- XXXXX-child のように子テーマを作ってる場合は、子テーマ内の方の
上記を FTP 等を使って編集します。管理画面からも編集できるようですが、おすすめはしません。
コード
-
functions.php
の一番下あたりへ、以下のコードをコピペするだけです。- 文字コードは必ず UTF-8(BOM無し) にしてください。
//-- Contact Form 7 の <textarea> にひらがなが含まれなければエラーにする
add_filter('wpcf7_validate_textarea', 'wpcf7_validation_textarea_hiragana', 10, 2);
add_filter('wpcf7_validate_textarea*', 'wpcf7_validation_textarea_hiragana', 10, 2);
function wpcf7_validation_textarea_hiragana($result, $tag)
{
$name = $tag['name'];
$value = (isset($_POST[$name])) ? (string) $_POST[$name] : '';
if ($value !== '' && !preg_match('/[ぁ-ん]/u', $value)) {
$result['valid'] = false;
$result['reason'] = array($name => 'この内容は送信できません。');
}
return $result;
}
- 2018年10月24日時点
- WordPress の最新バージョン 4.9.8 は、PHP5.2.17 でも動くようですので、念のため古いバージョンのPHPでも動くような書き方をしています。
- Contact Form 7 はバージョン 4.1 から仕様が変わったそうですので、古いバージョンから最新バージョン 5.0.4 まで動くような書き方をしています。