Creare un ID univoco per ogni voce del modulo

Desiderate creare un ID unico per ogni voce del vostro modulo? Dare a ogni voce del modulo un numero di riferimento univoco può rendere più facile tracciare qualsiasi funzione interna a cui si voglia fare riferimento in seguito. Utilizzando PHP e gli Smart Tag di WPForms, è possibile ottenere facilmente questo risultato. In questo tutorial vi guideremo attraverso ogni passo.

In WPForms esiste già uno Smart Tag predefinito che genera un valore univoco. Tuttavia, lo scopo di questo tutorial è quello di controllare quale può essere il valore univoco, ad esempio limitandolo ai soli numeri, aggiungendo un prefisso prima dell'ID univoco, ecc. Per ulteriori informazioni sullo Smart tag Unique Value, consultare questa utile guida.

Per questa esercitazione, creeremo un modulo di supporto per i nostri visitatori. A ogni richiesta di assistenza verrà assegnato un ID univoco. Questo sarà il numero del ticket di assistenza. Questo numero sarà memorizzato all'interno della voce in un campo nascosto.

Con la cache del browser, la cache del server o la cache del plugin, è possibile che questi ID univoci si duplichino.

Creazione dell'ID univoco

Di solito iniziamo le nostre esercitazioni creando il nostro modulo. Tuttavia, poiché vogliamo utilizzare questo Smart Tag all'interno del nostro costruttore di moduli, questa volta inizieremo aggiungendo lo snippet di codice al nostro sito. Se avete bisogno di assistenza per aggiungere gli snippet di codice al vostro sito, potete leggere questo tutorial.

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

Questo snippet non solo creerà il codice necessario per creare un ID univoco per ogni invio di modulo, ma ci permetterà anche di usare questo numero come Smart Tag, in modo da poterlo allegare alle voci del modulo.

Creazione del modulo

Successivamente, creeremo il nostro modulo di assistenza. Questo modulo conterrà campi per il nome, l'indirizzo e-mail, un campo a tendina per cercare di individuare il problema e, infine, un campo di testo a paragrafi per consentire ai visitatori di fornire ulteriori informazioni sull'assistenza che stanno cercando. Tuttavia, poiché vogliamo memorizzare questo numero come parte delle nostre voci, aggiungeremo anche un campo nascosto per memorizzare questo numero ID univoco.

Se avete bisogno di aiuto per creare un modulo in WPForms, consultate questa documentazione.

Dopo aver aggiunto il campo nascosto, fare clic su di esso per aprire il pannello Opzioni campo. Andare quindi alla sezione Opzioni avanzate.

Nel valore predefinito, aggiungere semplicemente lo smart tag {unique_id}.

Aggiungere il nuovo Smart Tag per assegnare l'ID univoco a ogni voce del modulo.

I campi nascosti non sono visibili all'interno del modulo per i visitatori, ma utilizziamo questo campo per memorizzare l'ID univoco come riferimento interno, in modo che venga visualizzato nella voce.

Aggiunta dell'ID univoco ai messaggi di conferma

Se si desidera aggiungere il proprio ID univoco al messaggio di conferma, è necessario inserire il valore che viene memorizzato nel campo nascosto quando il modulo viene inviato.

Nel nostro modulo, l'ID del campo era 6, come si può vedere nell'immagine precedente. Aggiungeremo quindi questo al nostro messaggio di conferma, in modo da ottenere lo stesso identico valore.

{field_id="6"}

Quando si utilizza l'ID univoco all'interno del messaggio di conferma, è necessario utilizzare questo ID di campo all'interno del messaggio, come si vede nell'immagine sottostante, e non lo Smart Tag vero e proprio.

Aggiungete lo Smart Tag ID unico anche al messaggio di conferma

Se avete bisogno di aiuto per individuare l'ID del modulo o l'ID del campo del modulo, consultate questa guida.

Ora, quando il modulo viene inviato, i visitatori vedranno l'ID univoco e sarà registrato nel campo nascosto del modulo.

Ora, quando il modulo viene inviato, i visitatori vedranno l'ID univoco e sarà registrato nel campo nascosto del modulo.

FAQ

D: E se volessi un numero specifico di caratteri per il mio ID univoco?

R: L'esempio seguente fornisce solo un ID univoco a 6 cifre (solo esadecimale).

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

Questo frammento cattura l'ora corrente, la converte in una stringa esadecimale e la restringe a un numero di 6 caratteri.

D: Posso usare questo snippet per ottenere un valore solo numerico?

A: Naturalmente! È possibile utilizzare questo snippet che restituirà un valore numerico unico compreso tra 1 e 5.000.000.000. Utilizzando questo intervallo di numeri, si otterrà un numero unico compreso tra 1 e 10 cifre. Se si vuole ridurre il numero di cifre generate, lo si può fare nel parametro rand(1, 5000000000).

Ad esempio, se si volesse solo un numero di 6 cifre, lo snippet sarebbe qualcosa come rand(100000, 999999)Ma questo aumenta la possibilità di ripetere i numeri alla fine, dal momento che ci sono così tante combinazioni diverse che si possono usare con un limite di 6 cifre.

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

D: È possibile inserire un prefisso nell'ID univoco?

R: Assolutamente sì. Se si desidera aggiungere un prefisso, si può utilizzare questo 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 );

D: Posso controllare il numero incrementando il conteggio?

R: Assolutamente sì. Tuttavia, se desiderate incrementare il numero, vi consigliamo di seguire questa utile guida.

D: Posso utilizzare il valore del campo del modulo come prefisso dell'ID univoco?

R: Sì. Lo snippet seguente consente di utilizzare un campo specifico del modulo come prefisso per l'ID univoco.

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

È necessario sostituire i valori dei campi $field_id con l'ID del campo specifico del modulo che si desidera utilizzare per il prefisso. Inoltre, sostituire la variabile $hidden_field_id con l'ID del campo nascosto con lo Smart Tag ID univoco del modulo.

È tutto ciò che serve per creare un ID univoco per ogni invio di modulo. Volete elaborare uno Smart Tag all'interno delle etichette dei campi Checkbox? Provate il nostro tutorial su Come elaborare gli Smart Tag nelle etichette Checkbox.

Filtri di riferimento