Счетчик почты в электронной почте дублируется, когда две формы отправляются одновременно - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть счетчик почты, который увеличивается при успешной отправке письма.Этот почтовый счет виден в теле письма.Проблема возникает, когда две формы отправляются практически одновременно.Когда это происходит, электронное письмо отправляется разным пользователям с одинаковым количеством сообщений, например 10 и 10, тогда как оно должно быть 10 и 11.

Исходный код отсюда https://sevenspark.com/tutorials/how-to-create-a-counter-for-contact-form-7

#this code block is inserted in the email through shortcode
function RC_counter_func() {
    $val2 = date( "Y" ) . '-' . zeroise( get_option( 'RC_COUNTER', 0 ) + 1, 5 ); //Increment the current count  
    return $val2;
}
add_shortcode( 'RC_COUNTER', 'RC_counter_func' );

// Action performed when the mail is actually sent by CF7
function cf7dtx_increment_mail_counter( $WPCF7_ContactForm ) {

    #retrieve the details of the form/post
    $wpcf7 = WPCF7_ContactForm::get_current();
    $submission = WPCF7_Submission::get_instance();
    $form_id = $WPCF7_ContactForm->id();

    if ( $submission && $form_id === 988 || $form_id === 1584 )   {
        $val2 = zeroise( get_option( 'RC_COUNTER', 0 ) + 1, 5 ); //Increment the current count
        update_option( 'RC_COUNTER', $val2 ); //Update the settings with the new count
    }
}
add_action( 'wpcf7_mail_sent', 'cf7dtx_increment_mail_counter' );

Буду очень признателен за любые идеи о том, как предотвратить дублирование!При отправке форм одна за другой проблема не возникает, и номер правильно увеличивается в БД, но не в электронном письме.

1 Ответ

0 голосов
/ 05 февраля 2019

Как насчет генерации случайной строки небольшой длины (скажем, 6 символов) и добавления ее к идентификатору счетчика?Чтобы сделать значение уникальным.Вероятность такого столкновения может быть маловероятной.

Вы можете использовать этот метод для генерации случайной строки:

Генератор случайных строк PHP

В отсутствие этого - вам нужно найти способ, чтобы ваша операция чтения / обновления БД выполнялась в транзакции, где счетчик представляет собой последовательно увеличивающееся целое число.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...