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.
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.
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}.

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"}

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