プラグインContact Form 7のwpcf7_submission_is_blacklistedフィルタの使用方法・解説

概要

wpcf7_submission_is_blacklisted フィルタは、WordPress プラグイン Contact Form 7 において、送信されたフォームのデータがブラックリストに載せられているかどうかを判定する際に使用されます。このフィルタを利用することで、開発者はフォームの送信を自動的にブロックしたり、ブラックリストのチェックをカスタマイズしたりすることができます。

このフィルタは以下のような機能を実装する際に特によく使われます:

  1. スパム対策: 特定のメールアドレスやIPアドレスをブラックリストに載せて、不正な送信を防ぐ。
  2. ユーザー評価: 過去に悪い行動をしたユーザーをブロックするためのロジック。
  3. 記録の管理: 特定の条件を満たす送信内容を記録する。
  4. 条件付きの送信制限: 収集したデータの質を保つために特定の条件下で送信を禁止する。
  5. 特定のドメイン制限: 特定のドメインからの送信を制限する。
  6. セキュリティ強化: より安全なコンタクトフォームを実現するための機能追加。

構文

フィルタは以下のように使用します:

add_filter( 'wpcf7_submission_is_blacklisted', 'my_custom_blacklist_check', 10, 2 );

パラメータ

  • $is_blacklisted: Boolean 値。デフォルトは false。送信がブラックリストに登録されているかどうか。
  • $submission: WPCF7_Submission オブジェクト。送信されたフォームのデータを含む。

戻り値

このフィルタは、フォームの送信がブラックリストに載せられているかどうかを決定する Boolean 値を返します。

使用可能なプラグインバージョン

  • Contact Form 7: バージョン 5.0 以降。
  • WordPress: バージョン 4.7 以降。

この関数のアクションでの使用可能性

アクション 使用可能性
mu_plugin_loaded
registered_post_type
plugins_loaded
wp_roles_init
setup_theme
after_setup_theme
set_current_user
init
register_sidebar
wp_loaded
send_headers
parse_query
pre_get_posts
wp
template_redirect
get_header
wp_head

サンプルコード

サンプルコード1: IPアドレスのブラックリストチェック

add_filter( 'wpcf7_submission_is_blacklisted', 'check_ip_blacklist', 10, 2 );

function check_ip_blacklist( $is_blacklisted, $submission ) {
    $blacklisted_ips = array( '192.168.1.1', '203.0.113.5' );
    $ip = $submission->get_posted_data()['your-ip-field'];

    if ( in_array( $ip, $blacklisted_ips ) ) {
        return true; // ブラックリストに載っている
    }

    return $is_blacklisted; // それ以外の場合は元の値を返す
}

このコードは、送信されたIPアドレスが特定のブラックリストに存在するかどうかをチェックし、存在すれば送信をブロックします。

サンプルコード2: ドメインの確認

add_filter( 'wpcf7_submission_is_blacklisted', 'check_email_domain', 10, 2 );

function check_email_domain( $is_blacklisted, $submission ) {
    $blacklisted_domains = array( 'badexample.com', 'spam.com' );
    $email = $submission->get_posted_data()['your-email-field'];
    $domain = substr( strrchr( $email, "@" ), 1 );

    if ( in_array( $domain, $blacklisted_domains ) ) {
        return true; // ドメインがブラックリストに載っている
    }

    return $is_blacklisted; // その他は元の値
}

このコードでは、送信者のメールアドレスのドメインをチェックし、指定されたドメインがブラックリストに含まれている場合、送信をブロックします。

サンプルコード3: フォームデータチェック

add_filter( 'wpcf7_submission_is_blacklisted', 'check_form_data', 10, 2 );

function check_form_data( $is_blacklisted, $submission ) {
    $form_data = $submission->get_posted_data();

    // 特定のフィールドに不正な値が含まれている場合
    if ( isset( $form_data['your-field'] ) && $form_data['your-field'] == 'invalidValue' ) {
        return true; // ブラックリスト
    }

    return $is_blacklisted;
}

このコードは、フォームデータに不正な値が含まれているかどうかをチェックします。不正な値が見つかれば、送信はブロックされます。

サンプルコード4: クッキー値によるチェック

add_filter( 'wpcf7_submission_is_blacklisted', 'check_cookie', 10, 2 );

function check_cookie( $is_blacklisted, $submission ) {
    if ( isset( $_COOKIE['blacklist_check'] ) && $_COOKIE['blacklist_check'] === 'true' ) {
        return true; // クッキーによってブラックリストにされている
    }

    return $is_blacklisted; // その他は元の値
}

このサンプルは、特定のクッキーの値に応じて、送信データがブラックリストに載せられているかどうかを決めます。

サンプルコード5: APIチェック

add_filter( 'wpcf7_submission_is_blacklisted', 'check_api_blacklist', 10, 2 );

function check_api_blacklist( $is_blacklisted, $submission ) {
    $email = $submission->get_posted_data()['your-email-field'];

    // 外部APIでのチェック (架空のエンドポイント)
    $response = wp_remote_get( "https://api.example.com/blacklist-check?email={$email}" );

    if ( is_wp_error( $response ) || !isset( $response['body'] ) ) {
        return $is_blacklisted; // エラーの場合は元の値を返す
    }

    $data = json_decode( $response['body'], true );
    if ( isset( $data['blacklisted'] ) && $data['blacklisted'] === true ) {
        return true; // ブラックリストに載っている
    }

    return $is_blacklisted; // その他は元の値
}

このコードは、外部APIを使用してメールアドレスがブラックリストに登録されているかどうかを確認します。APIからの応答によって送信をブロックするか判断します。

この関数について質問する


上の計算式の答えを入力してください