お問い合わせフォーム(Contact Form 7)で外国語のスパムメールを送信できない様にする方法

こんにちは!

先日「Contact Form 7」を使ってお問い合わせフォームを作成したのですが、外国語のスパムメールが送信される様になりました。悲しいなぁ・・・

そこで今日はお問い合わせフォーム(Contact Form 7)で外国語のスパムメールを送信できない様にする方法についてアウトプットします。

「Akismet Anti-Spam」を使う

「Akismet Anti-Spam」は、WordPressをインストールするとセットで最初からインストールされているプラグインです。

「Akismet Anti-Spam」は、プラグインを有効化し、無料利用でアカウント登録をして、発行されたAPIキーをプラグインに設定すると使える様になるそうです。

詳しい設定の手順は下記の記事を参考にしてください。

ただ、このブログで利用しているLuxeritasの開発者様曰く、「Akismet Anti-Spam」はかなり重たいプラグインとのことなので、今回「Akismet Anti-Spam」を使わない方法にしようと思います。

日本語以外の言語では送信できない様にする

この方法はお問い合わせの本文の部分、タグに「ひらがな」が無い場合、エラーを出して送信できなくするというコードをテーマの functions.php に貼り付けて保存することで実現できます。

コードは以下になります。

コードをコピーしてテーマの fanction.php に貼り付けます。

//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;
}

functions.php の更新手順

functions.php の更新手順は以下の通りになります。

ダッシュボードの「外観」から「テーマファイルエディター」をクリックします。

テーマを直接編集することの注意が表示されるので、「理解しました」をクリックします。

「テーマを編集」が表示されます。

  1. 「テーマファイル」で「function.php」をクリックします。
  2. 「選択した内容」の末尾にコードを貼り付けします。
  3. 「ファイルを更新」をクリックします。

「ファイルの編集に成功しました。」と表示されれば、編集は成功しています。

動作確認

最後に想定通りメッセージ本文にひらがなを含まない場合に送信エラーとなるかを確認します。

想定通りに送信エラーとなるのが確認できたら、続けてメッセージ本文にひらがなを含んでいる場合に正しく送信されるか確認します。

「ありがとうございます。メッセージは送信されました。」となれば、確認終了です。

以上が、お問い合わせフォーム(Contact Form 7)で外国語のスパムメールを送信できない様にする方法のアウトプットになります。最後までお読みいただきありがとうございました。