fbpx
Перейти к содержимому

Запрет дубликатов при заполнении в поле формы CF7 – Contact Form 7

Запрет дубликатов при заполнении в поле формы CF7Источник: http://cfdbplugin.com/?page_id=904

Ситуация: Есть Пользователи, которые заполняют формы (плагин Contact Form 7), но вы не хотите, чтобы они имели возможность заполнять их несколько раз.

Решение: Добавить проверку в область формы, и запретить дубликаты в базе для одного из полей формы. Удобнее всего это делать для e-mail. В итоге, если пользователь вводит e-mail повторно – ему выдается сообщение об ошибке.

Хук запрета дубликатов для CF7

  1. Для работы этого хука у вас должны быть установлены следующие плагины:
  2. Скопировать название формы, и название поля формы, для которого нужно будет установить хук.
    В примере ниже это email_123
  3. Для создания проверки, нужно добавить фильтр. Для этого удобно пользоваться плагином Shortcodes Actions and Filters.
    Перейти, Инструменты -> Shortcodes Actions and Filters. Нажать Add new и вставить следующий код:

    В этом коде нужно будет следать изменения в my_validate_email function:

    • Изменить название формы для $formName
    • Изменить название email поля для $fieldName
    • Написать текст, который будет поялвяться при наличии дубликатов $errorMessage

    Note: Название формы и название email поля должны быть уникальными и не повторяться в других формах, иначе будет путаница.

Разрешено более, чем одно совпадение

Бывают случаи, когда запрет дубликатов должен быть, но при этом должно быть разрешено более, чем одно совпадение. Например, нужно пропустить 5 одинаковых мейлов, а 6-й уже запретить.
Для этого в фильтр добавляется счетчик:

В этом коде дополнительно еще нужно внести изменения в строку:

Цифра 4 говорит о том, что фильтр пропустит 5 одинаковых мейлов. Если нужно, например, пропуситить 3 мейла, тогда измените цифру 4 на 2. И так далее…

2 комментария для “Запрет дубликатов при заполнении в поле формы CF7 – Contact Form 7”

  1. Добрый день!
    Подскажите пожалуйста, установлен код, для запрета дублирования url, но при отправке ничего не происходит, письма не отправляются, в чем может быть причина.
    Вот код
    function is_already_submitted($formName, $fieldName, $fieldValue) {
    require_once(ABSPATH . ‘wp-content/plugins/contact-form-7-to-database-extension/CFDBFormIterator.php’);
    $exp = new CFDBFormIterator();
    $atts = array();
    $atts[‘show’] = $fieldName;
    $atts[‘filter’] = “$fieldName=$fieldValue”;
    $atts[‘unbuffered’] = ‘true’;
    $exp->export($formName, $atts);
    $found = false;
    while ($row = $exp->nextRow()) {
    $found = true;
    }
    return $found;
    }

    /**
    * @param $result WPCF7_Validation
    * @param $tag array
    * @return WPCF7_Validation
    */
    function my_validate_email($result, $tag) {
    $formName = ’email’; // Change to name of the form containing this field
    $fieldName = ‘url-83’; // Change to your form’s unique field name
    $errorMessage = ‘Email has already been submitted’; // Change to your error message
    $name = $tag[‘name’];
    if ($name == $fieldName) {
    if (is_already_submitted($formName, $fieldName, $_POST[$name])) {
    $result->invalidate($tag, $errorMessage);
    }
    }
    return $result;
    }

    add_filter(‘wpcf7_validate_url’, ‘my_validate_url’, 10, 2);

    Вот форма
    Ваше ім’я (обов’язково)
    [text* your-name]

    url
    [url url-83]

    Тема
    [text your-subject]

    Ваше повідомлення
    [textarea your-message]

    [submit “Відправити”]

Добавить комментарий

Ваш адрес email не будет опубликован.