Как создать уникальный идентификатор для каждой отправки формы в контактной форме 7?

Мне нужно предоставить уникальный идентификатор для всех участников мероприятия, которые регистрируются на мероприятия онлайн. Я хотел дать уникальный идентификатор что-то вроде "17CONF001, 17CONF002,..."

Как этого добиться?

Для этой цели я использую плагин contact-form-7-dynamic-text-extension для процесса регистрации на моем веб-сайте.

Работа сделана:

Я использую следующую функцию для генерации номера билета.

/* Generate Quote Ticket */
function genTicketString() {
$length = 3;
$iclaa = "17ICLAA";
$characters = "0123456789";
for ($p = 0; $p < $length; $p++) {
    $string .= $characters[mt_rand(0, strlen($characters)-1)];
}
return $iclaa.$string;
}
add_shortcode('quoteticket', 'genTicketString');

в моем functions.php, и я добавил

[dynamictext ticket "quoteticket"]

в моей форме в контактной форме 7 и сделал это поле невидимым через css.

Наконец, я добавил [тикет] в ваше тело электронной почты.

В соответствии с решением, предоставленным AMCD.

Проблемы с этим кодом:

Каждое обновление дает другой ссылочный номер, тогда как он должен генерировать ссылочный номер для каждой отправки форм.


person Community    schedule 19.01.2017    source источник
comment
Почему бы не сгенерировать номер тикета в скрипте, который получает данные формы при отправке, а не в скрипте, который выводит форму?   -  person infinigrove    schedule 20.01.2017
comment
если это так, пожалуйста, дайте ответ. Я новичок в этом... Любая помощь будет приятной.. @infinigrove   -  person    schedule 20.01.2017
comment
Я не настолько знаком с wordpress или contact-form-7, чтобы дать вам подробный ответ. Не могли бы вы опубликовать код, который получает данные формы и генерирует электронное письмо? Вот где вам нужно внести изменения.   -  person infinigrove    schedule 20.01.2017
comment
@infinigrove да ... он получает данные из формы и генерирует электронную почту.   -  person    schedule 20.01.2017
comment
В основном вам нужно вызывать функцию genTicketString() при получении данных, а не при создании формы. Я не могу дать вам более подробный ответ, если вы не обновите свой вопрос, чтобы также включить код, который получает данные из формы и генерирует электронное письмо.   -  person infinigrove    schedule 20.01.2017


Ответы (2)


надеюсь, что это может помочь, добавьте этот код в свой function.php

//Define the key to store in the database
define( 'CF7_COUNTER', 'cf7-counter' );

//Create the shortcode which will set the value for the DTX field
function cf7dtx_counter(){
    $kodeawal = "FJY";
    $val = get_option( CF7_COUNTER, 0) + 1;  //Increment the current count
    return $kodeawal.$val;
}
add_shortcode('CF7_counter', 'cf7dtx_counter');

//Action performed when the mail is actually sent by CF7
function cf7dtx_increment_mail_counter(){
    $val = get_option( CF7_COUNTER, 0) + 1; //Increment the current count
    update_option(CF7_COUNTER, $val); //Update the settings with the new count
}
add_action('wpcf7_mail_sent', 'cf7dtx_increment_mail_counter');

Затем добавьте это в контактную форму 7

<p>[dynamictext cf7-counter "CF7_counter"]</p>

Вывод в вашей форме будет "FJY1", "FJY2" и т.д.

Спасибо Sevenspark: http://sevenspark.com/tutorials/how-to-create-a-counter-for-contact-form-7

person fidibsp    schedule 05.06.2017
comment
Да, но если вы откроете одну и ту же форму в разных браузерах одновременно, каждый браузер будет иметь одинаковый номер. - person emir; 11.04.2020

Если вы хотите сгенерировать случайное число в качестве идентификатора, просто используйте это.

define( 'CF7_COUNTER', 'cf7-counter' );

function cf7dtx_counter(){
    $length = 8;
    $characters = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    for ($p = 0; $p < $length; $p++) {
        $string .= $characters[mt_rand(0, strlen($characters)-1)];
    }
    return $string;
}
add_shortcode('CF7_counter', 'cf7dtx_counter');

function cf7dtx_increment_mail_counter(){
    $val = get_option( CF7_COUNTER, 0) + 1;
    update_option(CF7_COUNTER, $val);
}
add_action('wpcf7_mail_sent', 'cf7dtx_increment_mail_counter');

Затем добавьте это в контактную форму 7

[dynamichidden Request-ID "CF7_counter"]

person Santanu    schedule 27.05.2020