Criação de um ID exclusivo para cada entrada de formulário

Você gostaria de criar um ID exclusivo para cada entrada de formulário? Dar a cada entrada de formulário um número de referência exclusivo pode facilitar o rastreamento de qualquer função interna que você queira consultar posteriormente. Usando PHP e WPForms Smart Tags, você pode conseguir isso facilmente. Neste tutorial, vamos orientá-lo em cada etapa.

Já existe uma Smart Tag padrão no WPForms que gerará um valor exclusivo. No entanto, o objetivo deste tutorial é controlar o que esse valor exclusivo pode ser, como limitá-lo apenas a números, adicionar um prefixo antes do ID exclusivo etc. Para obter mais informações sobre a tag inteligente Unique Value, consulte este guia útil.

Para este tutorial, criaremos um formulário de suporte para nossos visitantes. Cada envio de suporte receberá um ID exclusivo. Esse será o número do tíquete de suporte. Em seguida, armazenaremos esse número dentro da entrada em um campo oculto.

Com qualquer cache de navegador, cache de servidor ou cache de plug-in, há uma chance de que essas IDs exclusivas sejam duplicadas.

Criação do ID exclusivo

Normalmente, começamos nossos tutoriais criando nosso formulário. No entanto, como queremos usar essa Smart Tag em nosso construtor de formulários, desta vez começaremos adicionando o snippet de código ao nosso site. Se precisar de ajuda para adicionar snippets de código ao seu site, leia 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 );

Esse snippet não só criará o código de que precisamos para criar um ID exclusivo para cada envio de formulário, mas também nos permitirá usar esse número como uma Smart Tag para que possamos anexá-lo às entradas do formulário.

Criando seu formulário

Em seguida, criaremos nosso formulário de suporte. Esse formulário conterá campos para nome, endereço de e-mail, um campo suspenso para tentar capturar o problema e, por fim, um campo de formulário de texto de parágrafo para permitir que os visitantes forneçam mais informações sobre o suporte que estão buscando. No entanto, como queremos armazenar esse número como parte de nossas entradas, também adicionaremos um campo oculto para armazenar esse número de ID exclusivo.

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

Depois de adicionar o Hidden Field (Campo oculto), clique nele para abrir o painel Field Options (Opções de campo ). Em seguida, vá para a seção Advanced Options (Opções avançadas ).

No Default Value, basta adicionar a Smart Tag {unique_id}.

Adicione a nova Smart Tag para atribuir o ID exclusivo a cada entrada de formulário.

Os campos ocultos não são visíveis dentro do formulário para seus visitantes, mas estamos usando esse campo para armazenar o ID exclusivo para referência interna, de modo que ele seja exibido na entrada.

Adição da ID exclusiva às mensagens de confirmação

Se quiser adicionar seu ID exclusivo à mensagem de confirmação, você precisará colocar o valor que é armazenado no campo oculto quando o formulário é enviado.

Em nosso formulário, o ID do campo era 6, como você pode ver na imagem anterior. Portanto, adicionaremos isso à nossa mensagem de confirmação para que ela extraia exatamente o mesmo valor.

{field_id="6"}

Ao usar a ID exclusiva dentro da mensagem de confirmação, você deve usar essa ID de campo dentro da mensagem, como visto na imagem abaixo, e não a Smart Tag real.

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

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

Agora, quando o formulário for enviado, seus visitantes verão a ID exclusiva e ela será registrada no campo oculto do formulário.

Agora, quando o formulário for enviado, seus visitantes verão a ID exclusiva e ela será registrada no campo oculto do formulário.

PERGUNTAS FREQUENTES

P: E se eu quiser um número específico de caracteres para minha ID exclusiva?

R: Você pode ver que o exemplo a seguir fornecerá apenas uma ID exclusiva de 6 dígitos (somente 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 );

Esse snippet pegará a hora atual, depois a converterá em uma cadeia hexadecimal e a restringirá a um número de 6 caracteres.

P: Posso usar esse snippet para obter um valor somente numérico?

A: Claro que sim! Você pode usar este snippet que retornará um valor numérico exclusivo entre os números de 1 a 5.000.000.000. Usar esse intervalo de números significa que você terá um número exclusivo entre 1 e 10 dígitos. Se quiser reduzir o número de dígitos gerados, você deve refletir isso no rand(1, 5000000000).

Por exemplo, se você quisesse apenas um número de 6 dígitos, o snippet seria algo como rand(100000, 999999)Mas isso aumenta a possibilidade de repetição de números, pois há muitas combinações diferentes que podem ser usadas 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 prefixar a ID exclusiva?

R: Sem dúvida. Se quiser adicionar um prefixo, você pode usar este snippet.

/*
 * 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: Sem dúvida. No entanto, se você quiser incrementar o número, recomendamos seguir este guia útil.

P: Posso usar o valor do campo do formulário como o prefixo da ID exclusiva?

R: Sim. O snippet abaixo permitirá que você use um campo específico do seu formulário como prefixo para o ID exclusivo.

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

Você precisará substituir os valores de $field_id com o ID do campo de formulário específico que você gostaria de usar para o prefixo. Além disso, substitua a variável $hidden_field_id com a ID do campo oculto com a Smart Tag de ID exclusiva em seu formulário.

E isso é tudo o que você precisa para criar um ID exclusivo para cada envio de formulário. Você gostaria de processar uma Smart Tag dentro de rótulos de campo Checkbox? Experimente nosso tutorial sobre Como processar Smart Tags em rótulos de caixa de seleção.

Filtros de referência