For WordPress

WordPress(Contact Form 7)でFormBlockerを使う方法

WordPressサイトの「Contact Form 7」というお問い合わせフォームでも、FormBlockerの迷惑フォーム営業ブロックを使えるようにする方法をご案内します。

なぜ、いつものスニペットをそのまま貼るだけではダメなの?

通常のFormBlockerは、フォームのページに短いコードを1行貼るだけで動きます。ただしContact Form 7は、ページを移動せずに裏側で送信を完了させる、少し特殊な仕組みを使っています。そのため、いつもの方法ではFormBlockerがうまく割り込めません。

そこで今回は、フォームのページ側ではなく、WordPressのサーバー側で直接FormBlockerに問い合わせる方法を使います。少しだけ作業が増えますが、確実に動きます。

FormBlockerとWordPressは、同じサーバーに置く必要はありません

今回ご案内する方法は、WordPressのサーバーが裏側でFormBlockerに直接問い合わせる仕組みです。ブラウザを経由しないため、FormBlockerとWordPressが別々のサーバー・別々のドメインであっても問題なく動作します。「同じサーバーに入れないと使えないのでは」と心配される必要はありません。

  1. 1

    FormBlockerの「問い合わせ先URL」を確認する

    ご自身のFormBlockerの管理画面にログインし、左メニューの「連携設定」を開きます。

    ページ下のほうにある「導入コード」という欄に、次のような1行のコードが表示されています。

    <script src="https://(お使いのFormBlockerのURL)/assets/embed.js" data-site="xxxxxxxx"></script>

    この中の src="..." の部分(URL)だけをメモします。そのURLの末尾にある /assets/embed.js という部分を /api/capture.php に書き換えてください。

    例:https://example.com/formblocker/assets/embed.jshttps://example.com/formblocker/api/capture.php
  2. 2

    設置するファイルを用意する

    下のコードをコピーして、テキストエディタ(メモ帳など)に貼り付けます。1か所だけ、さきほどのURLに書き換えてください。

    <?php
    // FormBlocker × Contact Form 7 連携
    add_filter('wpcf7_spam', function ($spam) {
        if ($spam) {
            return $spam;
        }
    
        $submission = WPCF7_Submission::get_instance();
        if (!$submission) {
            return $spam;
        }
    
        $fields = $submission->get_posted_data();
    
        $response = wp_remote_post('ここに手順1で確認したURLを貼り付ける', [
            'timeout' => 10,
            'headers' => ['Content-Type' => 'application/json'],
            'body'    => wp_json_encode(['fields' => $fields]),
        ]);
    
        if (is_wp_error($response)) {
            return $spam;
        }
    
        $data = json_decode(wp_remote_retrieve_body($response), true);
        if (isset($data['action']) && $data['action'] === 'block') {
            $spam = true;
            $submission->add_spam_log([
                'agent'  => 'formblocker',
                'reason' => $data['message'] ?? 'FormBlocker判定によりブロック',
            ]);
        }
    
        return $spam;
    });

    保存するときのファイル名は formblocker-cf7-bridge.php にしてください(拡張子は必ず .php)。

    Windowsのメモ帳で保存する場合、「ファイルの種類」を「すべてのファイル」にしないと、末尾に .txt が付いてしまうことがあります。
  3. 3

    WordPressのサーバーに、置き場所を用意する

    WordPress自体の管理画面ではなく、サーバーの中身を直接見る必要があります。FTPソフト、またはご契約のレンタルサーバーが用意している「ファイルマネージャー」などを使ってください(お手元にない場合は、サイトを管理している制作会社やホスティング会社に確認してください)。

    WordPressが入っているフォルダの中にある wp-content フォルダを開き、その中に mu-plugins という名前のフォルダがあるか確認します。なければ、新しく作成してください(すべて半角小文字)。

  4. 4

    ファイルをアップロードする

    手順2で作った formblocker-cf7-bridge.php を、手順3で用意した wp-content/mu-plugins/ フォルダの中にアップロードします。

    このフォルダに置いたファイルは、WordPressの「プラグイン」の一覧画面には表示されません。有効化の操作も不要で、置いた時点で自動的に読み込まれます。
  5. 5

    試しに送信して確認する

    WordPressサイトのContact Form 7のフォームから、一度、普通の具体的な内容で試しに送信してみます。FormBlockerの管理画面の「投稿ログ」に、その内容が記録され、点数が付いていれば、通信はうまくいっています。

    次に、いかにも営業目的の定型文のような内容で、もう一度試しに送信してみます。

    ブロックされた場合も、送信者の画面には通常どおり「送信が完了しました」と表示されます(Contact Form 7の迷惑対策の仕様です)。実際にブロックされたかどうかは、送信者の画面ではなく、FormBlockerの「投稿ログ」で確認してください。
Troubleshooting

うまくいかないときは

よくあるつまずきポイントと、元に戻す方法をまとめました。

1投稿ログに何も記録されない

  • 手順1〜2で書き写したURLに間違いがないか確認してください(httphttpsの違い、capture.phpのスペルミスなど)
  • 設置したファイルが、正しく wp-content/mu-plugins/ フォルダの中にあるか確認してください

2サイトが真っ白になる、エラーが出る

設置したファイルの中身が、コピーの際に一部欠けていたり、文字が変わってしまっている可能性があります。次の「元に戻す」方法でいったんファイルを取り除き、コピーからやり直してください。

3元に戻したいとき

wp-content/mu-plugins/formblocker-cf7-bridge.php のファイルを削除するだけで、Contact Form 7はFormBlockerを使う前の状態に戻ります。WordPressの他の設定に影響はありません。

4この方法の注意点

  • WordPressサイトを複数お持ちの場合、同じ作業をサイトの数だけ行う必要があります
  • ブロックされた場合も送信者には「成功」と表示されるため、実際にブロックされているかは「投稿ログ」で確認する運用になります
  • WordPressの管理画面の操作だけでは完結せず、サーバーのファイルを直接操作する作業が必要です
この方法での作業に不安がある場合は、無理に進めず、サイトを管理している制作会社にこのページを共有してご相談ください。
トップに戻る