Como bloquear domínios dos seus campos de texto

Está interessado em aumentar a segurança dos seus formulários Web? Com um simples snippet PHP, pode bloquear eficazmente as submissões de domínios específicos diretamente no campo de texto do seu formulário. Neste tutorial, guiá-lo-emos através do processo passo-a-passo de implementação desta funcionalidade, garantindo que os seus formulários permanecem protegidos contra spam e submissões maliciosas.

Criar o formulário

Começaremos por criar um novo formulário. O nosso formulário é apenas um simples formulário de contacto onde pedimos que deixem o nome, o e-mail e quaisquer comentários adicionais que queiram acrescentar.

Para o nosso formulário de exemplo, adicionaremos os campos de formulário Nome, E-mail, Texto do parágrafo e Captcha personalizado (para segurança adicional).

comece por criar o seu formulário e adicionar os seus campos

Se precisar de ajuda, consulte o nosso guia útil sobre como criar um novo formulário.

Bloqueio dos domínios

Agora é hora de adicionar nosso(s) snippet(s). Para obter ajuda sobre como e onde adicionar snippets, consulte este tutorial.

Campo de texto de parágrafo

/**
 * 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 );

Este snippet vai olhar dentro do Texto do parágrafo para qualquer combinação das palavras apresentadas no interior do campo preg_match e bloqueia o envio do formulário se for verdadeiro.

se o campo de comentário contiver qualquer tipo de nome de domínio, o formulário não será enviado

Campo de texto de uma linha

Também pode utilizar facilmente a mesma funcionalidade para o campo Texto de linha única. O snippet será quase idêntico, com exceção do nome do filtro.

/**
 * 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 );

E é tudo o que precisa! Também gostaria de bloquear qualquer profanação nestes campos? Consulte o nosso tutorial sobre Como bloquear envios de formulários que contenham palavrões.

Acções de referência

FAQ

P: Posso utilizar isto no campo de formulário Rich Text?

R: Sem dúvida! Aqui está o snippet para o campo de formulário Rich Text.

/**
 * 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 );

P: Como posso aplicar isto a outros domínios?

A: Quase todos os campos têm algum tipo de validação. A maioria dos campos utiliza do_action( wpforms_process_validate_{$field_type}, $field_id, $field_submit, $form_data ). Basta substituir _{$field_type} com o tipo de campo.