Criar um ID único para cada entrada de formulário

Gostaria de criar um ID único para cada uma das suas entradas de formulário? Dar a cada entrada de formulário um número de referência único pode facilitar o rastreio de qualquer função interna que possa querer referenciar mais tarde. Usando PHP e WPForms Smart Tags, você pode facilmente conseguir isso. Neste tutorial, vamos guiá-lo através de cada passo.

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

Para este tutorial, vamos criar um formulário de suporte para os nossos visitantes. A cada envio de suporte será atribuída uma ID exclusiva. Este será o número do ticket de suporte. Em seguida, armazenaremos esse número dentro da entrada num campo oculto.

Com qualquer cache de navegador, cache de servidor ou cache de plug-in, existe a possibilidade de estes IDs únicos serem duplicados.

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, vamos começar por adicionar o snippet de código ao nosso site desta vez. Se precisar de ajuda para adicionar snippets 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 snippet não só criará o código de que precisamos para criar um ID exclusivo com 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.

Criar o seu formulário

Em seguida, criaremos nosso formulário de suporte. Esse formulário conterá campos para Nome, Endereço de email, um campo suspenso para tentar capturar o problema e, finalmente, 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 procurando. 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 Campo Oculto, clique nele para abrir o painel Opções de Campo. Em seguida, aceda à secção Opções avançadas.

No Valor por defeito, basta adicionar a Smart Tag {unique_id}.

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

Os campos ocultos não são visíveis no interior do formulário para os seus visitantes, mas estamos a utilizar este campo para armazenar o ID único para referência interna, de modo a que seja apresentado na entrada.

Adicionando o ID único às mensagens de confirmação

Se pretender adicionar o seu ID único à sua mensagem de confirmação, terá de colocar o valor que é armazenado no campo oculto quando o formulário é submetido.

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

{field_id="6"}

Ao utilizar a ID única dentro da mensagem de confirmação, deve utilizar esta ID de campo dentro da mensagem, como se vê na imagem abaixo, e não a Smart Tag real.

Adicione também a identificação única Smart Tag à 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 submetido, os seus visitantes verão o ID único e este será registado no campo oculto do formulário.

Agora, quando o formulário for submetido, os seus visitantes verão o ID único e este será registado no campo oculto do formulário.

FAQ

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

R: Pode ver que o exemplo seguinte apenas fornecerá uma ID única 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 snippet vai buscar a hora atual, convertê-la numa string hexadecimal e restringi-la a um número de 6 caracteres.

P: Posso utilizar este snippet para obter um valor apenas numérico?

A: Claro que sim! Pode utilizar este snippet que devolverá um valor numérico único entre os números 1 - 5.000.000.000. A utilização deste intervalo de números significa que obterá um número único entre 1 e 10 dígitos. Se quiser reduzir o número de dígitos gerados, deve refletir isso no rand(1, 5000000000).

Por exemplo, se só quisesse um número de 6 dígitos, o snippet seria algo como rand(100000, 999999)mas isso aumenta a possibilidade de repetir números, uma vez que há muitas combinações diferentes que podem ser utilizadas 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 o ID único?

R: Sem dúvida. Se pretender adicionar um prefixo, pode utilizar 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 pretender aumentar o número, recomendamos que siga este guia útil.

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

R: Sim. O snippet abaixo permite-lhe utilizar um campo específico do seu formulário como o 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 do $field_id com o ID do campo de formulário específico que gostaria de utilizar para o prefixo. Além disso, substitua a variável $hidden_field_id com o 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 envio de formulário. Gostaria de processar uma Smart Tag dentro de etiquetas de campo Checkbox? Experimente o nosso tutorial sobre Como processar etiquetas inteligentes em etiquetas de caixa de seleção.

Filtros de referência