7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【WordPress】Contact Form 7 で超お手軽スパム対策

Last updated at Posted at 2018-10-24

WordPress に問い合わせフォームを設置する際の定番プラグイン「Contact Form 7」について、お手軽にスパム対策する方法をご紹介します。


対象としている人

  • Contact Form 7 経由のスパムメールに悩まされている

  • 日本人のみを対象としたサイトを運営している

  • 手間はかけたくない

  • FTP(SFTP,FTPS)の使い方ぐらいは分かる

  • 文字コードという言葉ぐらいは何となく分かる


動作原理的なこと

  • スパムの大半は海外からのもの
    • であれば、<textarea> 内に書かれる本文が日本語のひらがなを含んでいなければ、エラーにすればいい

という非常に単純なものです。

本気で対策したいのであれば、Akismet のようなスパム対策用プラグインとの連携画像認証の導入等を検討してください。


編集対象ファイル

wp-content/themes/XXXXX/functions.php

  • XXXXX:現在使用中のテーマファイルに対応したディレクトリ
    • XXXXX-child のように子テーマを作ってる場合は、子テーマ内の方の functions.php を編集してください。

上記を 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 まで動くような書き方をしています。

参考URL

7
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?