Atenção!

Este artigo contém código PHP e destina-se a programadores. Oferecemos este código como cortesia, mas não prestamos suporte para personalizações de código ou desenvolvimento de terceiros.

Para orientação adicional, consulte o tutorial da WPBeginner sobre como adicionar código personalizado.

Ignorar

Criar um ID Único para Cada Entrada do Formulário

Gostaria de criar um ID único para cada uma das suas submissões de formulário? Dar a cada submissão de formulário um número de referência único pode facilitar o acompanhamento de qualquer função interna à qual possa querer referir-se mais tarde. Usando PHP e as Smart Tags do WPForms, pode conseguir isto facilmente. Neste tutorial, vamos guiá-lo através de cada passo.

Já existe uma Smart Tag padrão no WPForms que gera um valor único. No entanto, o propósito deste tutorial é controlar qual pode ser esse valor único, como limitá-lo apenas a números, adicionar um prefixo antes do ID único, etc. Para mais informações sobre a Smart Tag de Valor Único, consulte este guia útil.

Para este tutorial, vamos criar um formulário de suporte para os nossos visitantes. Cada submissão de suporte será atribuída a um ID único. Este será o número do seu ticket de suporte. Em seguida, armazenaremos esse número dentro da submissão num Campo Oculto.

Com qualquer cache de navegador, cache de servidor ou cache de plugin, existe a possibilidade de estes IDs únicos duplicarem.

Criação do ID Único

Normalmente começamos os nossos tutoriais criando o nosso formulário. No entanto, como queremos usar esta Smart Tag dentro do nosso construtor de formulários, começaremos por adicionar primeiro o trecho de código ao nosso site desta vez. Se precisar de alguma assistência com a adição de trechos de código ao seu site, pode ler este tutorial para obter ajuda.

/*
 * Create a unique_id Smart Tag and assign it to each form submission.
 *
 * @link https://wpforms.com/developers/how-to-create-a-unique-id-for-each-form-entry/
 */

// Generate Unique ID Smart Tag for WPForms
function wpf_dev_register_smarttag( $tags ) {
    
    // Key is the tag, item is the tag name.
    $tags['unique_id'] = 'Unique ID';
    
    return $tags;
}

add_filter( 'wpforms_smart_tags', 'wpf_dev_register_smarttag' );

// Generate Unique ID value
function wpf_dev_process_smarttag( $content, $tag, $form_data, $fields, $entry_id ) {
    
    // Only run if it is our desired tag.
    if ( 'unique_id' === $tag && !$entry_id ) {
        
        // Replace the tag with our Unique ID that will be prefixed with wpf.
        $content = str_replace( '{unique_id}', uniqid( 'wpf', true ), $content );
    } elseif ( 'unique_id' === $tag && $entry_id ) {
        
        foreach ( $form_data['fields'] as $field ) {
            
            if ( preg_match( '/\b{unique_id}\b/', $field['default_value'] ) ) {
                $field_id = $field['id'];
                break;
            }
        }
        
        $content = str_replace( '{unique_id}', $fields[$field_id]['value'], $content );
    }
    
    return $content;
}

add_filter( 'wpforms_smart_tag_process', 'wpf_dev_process_smarttag', 10, 5 );

Este trecho não só criará o código de que necessitamos para construir um ID único com cada submissão de formulário, mas também nos permitirá usar este número como uma Smart Tag para que possamos anexá-lo às nossas submissões de formulário.

Criar o Seu Formulário

Em seguida, criaremos o nosso formulário de suporte. Este formulário conterá campos para Nome, Endereço de E-mail, um campo de Menu Suspenso para tentar capturar o problema e, finalmente, um campo de formulário de Texto de Parágrafo para permitir aos nossos visitantes um local para fornecer mais informações sobre o suporte que procuram. No entanto, como queremos armazenar este número como parte das nossas submissões, também adicionaremos um Campo Oculto para armazenar esse número de ID único também.

Se precisar de ajuda para criar um formulário no WPForms, consulte esta documentação.

Após adicionar o Campo Oculto, clique nele para abrir o painel Opções do Campo. Em seguida, vá para a secção Opções Avançadas.

No Valor Padrão, simplesmente adicione a Smart Tag {unique_id}.

Adicione a nova Smart Tag para atribuir o ID único a cada entrada do formulário.

Os campos ocultos não são visíveis dentro do formulário para os seus visitantes, mas estamos a usar este campo para armazenar o ID único para referência interna, de modo a que ele seja exibido na submissão.

Adicionar o ID Único às Mensagens de Confirmação

Se desejar adicionar o seu ID único à sua mensagem de confirmação, terá de colocar o valor que é armazenado dentro do Campo Oculto quando o formulário for submetido.

No nosso formulário, o ID do campo era 6, como pode ver na imagem anterior. Por isso, adicionaremos isto à nossa mensagem de confirmação para que ele puxe exatamente o mesmo valor.

{field_id="6"}

Ao utilizar o ID único na mensagem de confirmação, deve usar o ID deste campo na mensagem, como visto na imagem abaixo, e não a Smart Tag real.

Adicione a Smart Tag de ID único à mensagem de confirmação também

Se precisar de ajuda para localizar o ID do seu formulário ou o ID de um campo do formulário, consulte este tutorial.

Agora, quando o formulário for submetido, os seus visitantes verão o ID único, bem como o registo deste no Campo Oculto do formulário.

Agora, quando o formulário for submetido, os seus visitantes verão o ID único, bem como o registo deste no Campo Oculto do formulário.

FAQ

P: E se eu quisesse um número específico de caracteres para o meu ID único?

R: Pode ver que o exemplo seguinte fornecerá apenas um ID único de 6 dígitos (apenas hexadecimal).

/*
 * Create a unique ID with a specific number of characters and assign it to each form submission.
 *
 * @link https://wpforms.com/developers/how-to-create-a-unique-id-for-each-form-entry/
 */

// Generate Unique ID Smart Tag for WPForms
function wpf_dev_register_smarttag( $tags ) {

    // Key is the tag, item is the tag name.
    $tags['unique_id'] = 'Unique ID';

    return $tags;
}

add_filter( 'wpforms_smart_tags', 'wpf_dev_register_smarttag' );

// Generate Unique ID value
function wpf_dev_process_smarttag( $content, $tag, $form_data, $fields, $entry_id ) {

    // Only run if it is our desired tag.
    if ( 'unique_id' === $tag && !$entry_id ) {

        // Generate a hexadecimal string based on the time to ensure uniqueness
        // Reduce the string to 6 characters
        $uuid = substr( md5( time() ), 0, 6 );

        // Replace the tag with our Unique ID.
        $content = str_replace( '{unique_id}', $uuid, $content );

    } elseif ( 'unique_id' === $tag && $entry_id ) {

        foreach ( $form_data['fields'] as $field ) {

            if ( preg_match( '/\b{unique_id}\b/', $field['default_value'] ) ) {
                $field_id = $field['id'];
                break;
            }
        }

        $content = str_replace( '{unique_id}', $fields[$field_id]['value'], $content );
    }

    return $content;
}

add_filter( 'wpforms_smart_tag_process', 'wpf_dev_process_smarttag', 10, 5 );

Este trecho irá obter a hora atual, convertê-la numa string hexadecimal e limitá-la a um número de 6 caracteres.

P: Posso usar este trecho para obter um valor apenas numérico?

R: Claro! Pode usar este trecho que retornará um valor numérico único entre os números de 1 – 5.000.000.000. Usar este intervalo de números significará que obterá um número único entre 1 e 10 dígitos. Se quiser reduzir o número de dígitos gerados, refletirá isso em rand(1, 5000000000).

Por exemplo, se quisesse apenas um número de 6 dígitos, o trecho seria algo como rand(100000, 999999), mas isto aumenta a possibilidade de repetição de números eventualmente, uma vez que existem tantas combinações diferentes que pode usar com um limite de 6 dígitos.

/*
 * Create a unique_id numeric-only Smart Tag and assign it to each form submission.
 *
 * @link https://wpforms.com/developers/how-to-create-a-unique-id-for-each-form-entry/
 */

// Generate Unique ID Smart Tag for WPForms
function wpf_dev_register_smarttag( $tags ) {

    // Key is the tag, item is the tag name.
    $tags['unique_number_id'] = 'Unique Number ID';

    return $tags;
}

add_filter( 'wpforms_smart_tags', 'wpf_dev_register_smarttag' );

// Generate Unique ID value
function wpf_dev_process_smarttag( $content, $tag, $form_data, $fields, $entry_id ) {

    // Only run if it is our desired tag.
    if ( 'unique_number_id' === $tag && !$entry_id ) {

        // Generate a random numeric ID between 1 and 5,000,000,000
        $unique_id = rand(1, 5000000000);

        // Replace the tag with our Unique ID.
        $content = str_replace( '{unique_number_id}', $unique_id, $content );

    } elseif ( 'unique_number_id' === $tag && $entry_id ) {

        foreach ( $form_data['fields'] as $field ) {

            if ( preg_match( '/\b{unique_number_id}\b/', $field['default_value'] ) ) {
                $field_id = $field['id'];
                break;
            }
        }

        $content = str_replace( '{unique_number_id}', $fields[$field_id]['value'], $content );
    }

    return $content;
}

add_filter( 'wpforms_smart_tag_process', 'wpf_dev_process_smarttag', 10, 5 );

P: Posso adicionar um prefixo ao ID único?

R: Absolutamente. Se desejar adicionar um prefixo, pode usar este trecho.

/*
 * Create a unique ID and add a prefix.
 *
 * @link https://wpforms.com/developers/how-to-create-a-unique-id-for-each-form-entry/
 */

// Generate Unique ID Smart Tag for WPForms
function wpf_dev_register_smarttag( $tags ) {

    // Key is the tag, item is the tag name.
    $tags['my_unique_id'] = 'My Unique ID';

    return $tags;
}

add_filter( 'wpforms_smart_tags', 'wpf_dev_register_smarttag' );

// Generate Unique ID value
function wpf_dev_process_smarttag( $content, $tag, $form_data, $fields, $entry_id ) {

    // Only run if it is our desired tag.
    if ( 'my_unique_id' === $tag && !$entry_id ) {

        // Replace the tag with our Unique ID that will be prefixed with "WPF-".
        $content = str_replace( '{my_unique_id}', uniqid('WPF-', true), $content );

    } elseif ( 'my_unique_id' === $tag && $entry_id ) {

        foreach ( $form_data['fields'] as $field ) {

            if ( preg_match( '/\b{my_unique_id}\b/', $field['default_value'] ) ) {
                $field_id = $field['id'];
                break;
            }
        }

        $content = str_replace( '{my_unique_id}', $fields[$field_id]['value'], $content );
    }

    return $content;
}

add_filter( 'wpforms_smart_tag_process', 'wpf_dev_process_smarttag', 10, 5 );

P: Posso controlar o número incrementando a contagem?

R: Absolutamente. No entanto, se desejar incrementar o número, recomendamos seguir este guia útil em vez disso.

P: Posso usar o valor de um campo do formulário como prefixo do ID único?

R: Sim. O trecho abaixo permitir-lhe-á usar um campo específico do seu formulário como prefixo para o ID único.

/*
 * Create a unique ID and add a prefix based on user submitted data.
 *
 * @link https://wpforms.com/developers/how-to-create-a-unique-id-for-each-form-entry/
 */

// Generate Unique ID on form submission and add to a hidden field
function wpf_dev_generate_unique_id( $fields, $entry, $form_data ) {

    // Replace '5' with the actual field ID of your field
    $field_id = 5;
    // Replace '3' with the actual field ID of your hidden field for unique ID
    $hidden_field_id = 3;

    // Check if the field exists and has a value
    if ( isset( $fields[$field_id]['value'] ) && ! empty( $fields[$field_id]['value'] ) ) {
        // Get the field value
        $field_value = $fields[$field_id]['value'];

        // Sanitize the field value to use as a prefix
        $prefix = preg_replace( '/[^A-Za-z0-9]/', '', $field_value );

        // Generate unique ID with the dropdown value as prefix
        $unique_id = $prefix . '-' . uniqid();

        // Add the unique ID to the hidden field
        foreach ( $fields as &$field ) {
            if ( $field['id'] == $hidden_field_id ) {
                $field['value'] = $unique_id;
                break;
            }
        }
    }

    return $fields;
}
add_filter( 'wpforms_process_filter', 'wpf_dev_generate_unique_id', 10, 3 );

// Register the Unique ID Smart Tag for WPForms
function wpf_dev_register_smarttag( $tags ) {
    // Key is the tag, item is the tag name.
    $tags['my_unique_id'] = 'My Unique ID';
    return $tags;
}
add_filter( 'wpforms_smart_tags', 'wpf_dev_register_smarttag' );

// Process Unique ID Smart Tag to retrieve the value from the hidden field
function wpf_dev_process_smarttag( $content, $tag, $form_data, $fields, $entry_id ) {
    // Only run if it is our desired tag
    if ( 'my_unique_id' === $tag ) {
        // Replace '3' with the actual field ID of your hidden field for unique ID
        $hidden_field_id = 3;
        if ( isset( $fields[$hidden_field_id]['value'] ) ) {
            $content = str_replace( '{my_unique_id}', $fields[$hidden_field_id]['value'], $content );
        }
    }
    return $content;
}
add_filter( 'wpforms_smart_tag_process', 'wpf_dev_process_smarttag', 10, 5 );

Terá de substituir os valores da variável $field_id pelo ID do campo específico do formulário que gostaria de usar como prefixo. Além disso, substitua a variável $hidden_field_id pelo ID do campo Oculto com a Smart Tag de ID Único no seu formulário.

E é tudo o que precisa para criar um ID único para cada submissão de formulário. Gostaria de processar uma Smart Tag nos rótulos dos campos Checkbox? Experimente o nosso tutorial sobre Como Processar Smart Tags em Rótulos de Checkbox.

Filtros de Referência