ブログを開設したばかりで、これからコツコツ始めようとしていた矢先、
英文のスパムメールがやってきました。

なんかの営業メールみたいですが、まったく興味がありません。
そしてこんなメールは受け取りたくないと思ったので、
対策を講じることにしました。
スパムメール対策の前提条件
- 問い合わせフォームは、日本語以外受け付けたくない
- Contact Form 7というプラグインで問い合わせフォームを作っている
- テーマは、Cocoonを利用している
とこの環境下で動作すればよいという前提で対策しました。
仕様
Contact Form 7のお問い合わせ内容の箇所で、「ひらがな」が含まれていないものを
スパムとしてエラーにする。
そんだけです。(´・ω・`)
Contact Form 7のお問い合わせ内容(textarea)はリファレンスをみると
wpcf7_validate_textareaのようなので、この部分に正規表現でひらがなが
含まれているのかどうかのチェックをするようにしました。
Cocoon利用者であれば、子テーマのfunctions.phpを以下のように
変更すればうまく動作します(はずです)。
functions.phpの変更は、FTP等で、ローカルPCにダウンロードしてバックアップを取ってから
変更することをお勧めします。
変更コード(functions.php) コピペ可
以下のコードの
/* ここから追加 */~/* ここで終了 */までの範囲を追加するだけです。
※windowsの人は文字コードをUTF-8で編集しないと、文字化けが起こるかもしれません。
functions.phpの場所

<?php //子テーマ用関数
//親skins の取得有無の設定
function include_parent_skins(){
return true; //親skinsを含める場合はtrue、含めない場合はfalse
}
//子テーマ用のビジュアルエディタースタイルを適用
add_editor_style();
//以下にcocoon子テーマ用の関数を書く
/* ここから追加 */
//
//-- 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 => 'ERROR この内容は送信できません。');
}
return $result;
}
/* ここで終了 */
動作確認結果
コード追加して、動作確認をするとうまく動作しました。

あとは、ひらがなを入れた場合は、正常に動作することも確認しています。
(面倒なので、画像はなし)
スパムメールで困っている方は試してみてください!!


コメント