Contact Form 7は非常に人気のあるWordPressプラグインで、多くのウェブサイトで使用されています。しかし、スパムの問題に悩まされることも多いです。特に海外からのスパムが増えると、管理が大変になります。そこで今回は、日本語の入力を必須にすることで海外からのスパムを防ぐ方法をご紹介します。
日本語入力を必須にするカスタムバリデーション
以下のコードをテーマのfunctions.php
ファイルに追加することで、日本語の文字が含まれていない入力を弾くことができます。
PHP
add_filter('wpcf7_validate_textarea', 'wpcf7_validation_textarea_japanese', 10, 2);
add_filter('wpcf7_validate_textarea*', 'wpcf7_validation_textarea_japanese', 10, 2);
add_filter('wpcf7_validate_text', 'wpcf7_validation_textarea_japanese', 10, 2);
add_filter('wpcf7_validate_text*', 'wpcf7_validation_textarea_japanese', 10, 2);
function wpcf7_validation_textarea_japanese($result, $tag)
{
$name = $tag['name'];
$value = (isset($_POST[$name])) ? (string) $_POST[$name] : '';
mb_regex_encoding("UTF-8");
if ($value !== '' && !preg_match('/[ぁ-んァ-ヶー一-龠]/u', $value)) {
$result['valid'] = false;
$result['reason'] = array($name => 'お問い合わせ内容は日本語で入力してください。');
}
return $result;
}
コードの説明
- フィルターの追加:
wpcf7_validate_textarea
およびwpcf7_validate_text
フィルターを使用して、テキストエリアとテキストフィールドにカスタムバリデーションを追加します。wpcf7_validate_textarea*
およびwpcf7_validate_text*
は必須フィールドに対して同じバリデーションを適用します。
- バリデーション関数:
- フィールドの名前を取得し、
$_POST
から送信された値を取得します。 - マルチバイト文字エンコーディングを「UTF-8」に設定します。
- 入力値が空でない場合、正規表現を使用して日本語の文字(ひらがな、カタカナ、漢字)が含まれているかをチェックします。
- 日本語の文字が含まれていない場合、バリデーションエラーを設定し、エラーメッセージを表示します。
- フィールドの名前を取得し、
このカスタムバリデーションを追加することで、日本語の入力を必須にし、海外からのスパムを効果的に防ぐことができます。