テキストフィールドからドメインをブロックする方法

ウェブフォームのセキュリティ強化に興味がありますか?シンプルな PHP スニペットを使えば、フォームのテキストフィールドで直接、特定のドメインからの送信を効果的にブロックすることができます。このチュートリアルでは、この機能を実装する手順を順を追って説明し、スパムや悪意のある送信からフォームを確実に守ります。

フォームの作成

まず、新しいフォームを作成します。このフォームでは、名前、Eメール、その他コメントを記入してもらいます。

この例のフォームでは、名前Eメール段落テキスト、およびカスタムCaptcha(追加セキュリティ用)フォームフィールドを追加します。

フォームを作成し、フィールドを追加します。

サポートが必要な場合は、新規フォームの作成方法に関するお役立ちガイドをご覧ください。

ドメインのブロック

いよいよスニペットを追加します。スニペットを追加する方法や場所については、こちらのチュートリアルをご覧ください

段落テキストフィールド

/**
 * Block domains inside the Paragraph Text
 *
 * @link   https://wpforms.com/developers/how-to-block-domains-from-your-text-fields/
 */
  
function wpf_dev_prevent_domains_textarea( $field_id, $field_submit, $form_data ) {
     
    if ( preg_match( '/www.|.com|.net|.org|.co.uk/', $field_submit ) ) {
        wpforms()->get( 'process' )->errors[ $form_data[ 'id' ] ][ $field_id ] = esc_html__( 'This is not allowed.', 'plugin-domain' );
    }
}
  
add_action( 'wpforms_process_validate_textarea' , 'wpf_dev_prevent_domains_textarea', 10, 3 );

このスニペットは 段落テキスト フォーム・フィールドに表示される単語の組み合わせは、次のとおりです。 preg_match で、もしtrueならフォーム送信をブロックする。

コメントフィールドにドメイン名が含まれている場合、フォームは送信されません。

一行テキストフィールド

同じ機能をSingle Line Textfor Fieldにも簡単に使うことができます。スニペットはフィルター名を除いてほとんど同じになります。

/**
 * Block domains inside the Single Line Text
 *
 * @link   https://wpforms.com/developers/how-to-block-domains-from-your-text-fields/
 */
  
function wpf_dev_prevent_domains_text( $field_id, $field_submit, $form_data ) {
     
    if ( preg_match( '/www.|.com|.net|.org|.co.uk/', $field_submit ) ) {
        wpforms()->get( 'process' )->errors[ $form_data[ 'id' ] ][ $field_id ] = esc_html__( 'This is not allowed.', 'plugin-domain' );
    }
}
  
add_action( 'wpforms_process_validate_text' , 'wpf_dev_prevent_domains_text', 10, 3 );

必要なのはそれだけです!これらのフィールドで冒涜的な言葉をブロックしたいですか?チュートリアル「冒涜的な言葉を含むフォーム送信をブロックする方法」をご覧ください。

参考措置

よくあるご質問

Q: リッチテキストのフォームフィールドに使用できますか?

A:もちろんです!リッチテキストフォームフィールドのスニペットです。

/**
 * Block domains inside the Rich Text
 *
 * @link   https://wpforms.com/developers/how-to-block-domains-from-your-text-fields/
 */
  
function wpf_dev_prevent_domains_richtext( $field_id, $field_submit, $form_data ) {
     
    if ( preg_match( '/www.|.com|.net|.org|.co.uk/', $field_submit ) ) {
        wpforms()->get( 'process' )->errors[ $form_data[ 'id' ] ][ $field_id ] = esc_html__( 'This is not allowed.', 'plugin-domain' );
    }
}
  
add_action( 'wpforms_process_validate_richtext' , 'wpf_dev_prevent_domains_richtext', 10, 3 );

Q:これを他の分野に応用するにはどうすればいいですか?

A: ほとんどすべてのフィールドに何らかのバリデーションがあります。ほとんどのフィールドは do_action( wpforms_process_validate_{$field_type}, $field_id, $field_submit, $form_data ).を交換するだけだ。 _{$field_type} をフィールド・タイプで指定する。