Création d'un identifiant unique pour chaque entrée de formulaire

Souhaitez-vous créer un identifiant unique pour chacune de vos entrées de formulaire ? Donner à chaque entrée de formulaire un numéro de référence unique peut faciliter le suivi de toute fonction interne que vous pourriez vouloir référencer plus tard. En utilisant PHP et les Smart Tags de WPForms, vous pouvez facilement réaliser cela. Dans ce tutoriel, nous allons vous guider à travers chaque étape.

Il existe déjà un Smart Tag par défaut dans WPForms qui génère une valeur unique. Cependant, le but de ce tutoriel est de contrôler ce que cette valeur unique peut être, comme la limiter aux nombres, ajouter un préfixe avant l'ID unique, etc. Pour plus d'informations sur la balise intelligente Valeur unique, veuillez consulter ce guide utile.

Pour ce tutoriel, nous allons créer un formulaire d'assistance pour nos visiteurs. Chaque demande d'assistance se verra attribuer un identifiant unique. Il s'agit du numéro du ticket d'assistance. Ce numéro sera stocké dans un champ caché à l'intérieur de l'entrée.

En cas de mise en cache du navigateur, du serveur ou du plugin, il est possible que ces identifiants uniques soient dupliqués.

Création de l'identifiant unique

Nous commençons généralement nos tutoriels par la création de notre formulaire. Cependant, comme nous voulons utiliser cette balise intelligente dans notre générateur de formulaires, nous commencerons par ajouter l'extrait de code à notre site cette fois-ci. Si vous avez besoin d'aide pour ajouter des extraits de code à votre site, vous pouvez consulter ce tutoriel.

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

Ce snippet va non seulement créer le code dont nous avons besoin pour construire un identifiant unique avec chaque soumission de formulaire, mais aussi nous permettre d'utiliser ce numéro comme une balise intelligente afin de pouvoir l'attacher à nos entrées de formulaire.

Création du formulaire

Ensuite, nous allons créer notre formulaire d'assistance. Ce formulaire contiendra des champs pour le nom, l'adresse électronique, un champ déroulant pour essayer de saisir le problème, et enfin, un champ de texte de paragraphe pour permettre à nos visiteurs de donner plus d'informations sur l'assistance qu'ils recherchent. Cependant, comme nous voulons stocker ce numéro dans le cadre de nos entrées, nous ajouterons également un champ caché pour stocker ce numéro d'identification unique.

Si vous avez besoin d'aide pour créer un formulaire dans WPForms, veuillez consulter cette documentation.

Après avoir ajouté le champ caché, cliquez dessus pour ouvrir le panneau des options du champ. Allez ensuite dans la section Options avancées.

Dans la valeur par défaut, ajoutez simplement la balise intelligente {unique_id}.

Ajoutez la nouvelle étiquette intelligente pour attribuer un identifiant unique à chaque entrée de formulaire.

Les champs cachés ne sont pas visibles à l'intérieur du formulaire par vos visiteurs, mais nous utilisons ce champ pour stocker l'identifiant unique pour référence interne afin qu'il s'affiche sur l'entrée.

Ajout de l'identifiant unique aux messages de confirmation

Si vous souhaitez ajouter votre identifiant unique à votre message de confirmation, vous devez placer la valeur stockée dans le champ caché lorsque le formulaire est soumis.

Dans notre formulaire, l'ID du champ était 6, comme vous pouvez le voir dans l'image précédente. Nous allons donc ajouter ceci à notre message de confirmation afin qu'il récupère exactement la même valeur.

{field_id="6"}

Lorsque vous utilisez l'identifiant unique dans le message de confirmation, vous devez utiliser cet identifiant de champ dans le message, comme le montre l'image ci-dessous, et non l'étiquette intelligente elle-même.

Ajouter l'ID Smart Tag unique au message de confirmation.

Si vous avez besoin d'aide pour localiser l'identifiant de votre formulaire ou de votre champ de formulaire, veuillez consulter ce tutoriel.

Désormais, lorsque le formulaire sera soumis, vos visiteurs verront l'identifiant unique et celui-ci sera enregistré dans le champ caché du formulaire.

Maintenant, lorsque le formulaire est soumis, vos visiteurs verront l'identifiant unique et il sera enregistré dans le champ caché du formulaire.

FAQ

Q : Que se passe-t-il si je souhaite un nombre spécifique de caractères pour mon identifiant unique ?

R : Vous pouvez voir que l'exemple suivant ne fournira qu'un identifiant unique à 6 chiffres (hexadécimaux uniquement).

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

Ce snippet récupère l'heure actuelle, la convertit en chaîne hexadécimale et la limite à un nombre de 6 caractères.

Q : Puis-je utiliser cet extrait pour obtenir une valeur uniquement numérique ?

A : Bien sûr ! Vous pouvez utiliser cet extrait qui renverra une valeur numérique unique comprise entre 1 et 5 000 000 000. L'utilisation de cette plage de chiffres signifie que vous obtiendrez un nombre unique de 1 à 10 chiffres. Si vous souhaitez réduire le nombre de chiffres générés, vous devez en tenir compte dans la section rand(1, 5000000000).

Par exemple, si vous ne voulez qu'un numéro à 6 chiffres, l'extrait sera quelque chose comme rand(100000, 999999)Mais cela augmente la possibilité de répéter des nombres à terme, car il y a tellement de combinaisons différentes que l'on peut utiliser avec une limite de 6 chiffres.

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

Q : Puis-je préfixer l'identifiant unique ?

R : Absolument. Si vous souhaitez ajouter un préfixe, vous pouvez utiliser cet extrait.

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

Q : Puis-je contrôler le nombre en incrémentant le compte ?

R : Absolument. Toutefois, si vous souhaitez incrémenter le nombre, nous vous recommandons de suivre ce guide utile.

Q : Puis-je utiliser la valeur du champ du formulaire comme préfixe de l'identifiant unique ?

R : Oui. L'extrait ci-dessous vous permettra d'utiliser un champ spécifique de votre formulaire comme préfixe de l'identifiant unique.

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

Vous devrez remplacer les valeurs de l'élément $field_id avec l'ID du champ de formulaire spécifique que vous souhaitez utiliser pour le préfixe. Remplacez également la variable $hidden_field_id avec l'ID du champ caché avec l'ID unique Smart Tag sur votre formulaire.

C'est tout ce dont vous avez besoin pour créer un identifiant unique pour chaque soumission de formulaire. Souhaitez-vous traiter une étiquette intelligente à l'intérieur d'une étiquette de champ Checkbox? Essayez notre tutoriel sur Comment traiter les Smart Tags dans les étiquettes de champs Checkbox.

Filtres de référence