CoolHeart
@CoolHeart
Junior FrontEnd developer

Как сделать свою проверку в Contact Form 7 перед отправкой?

Возникла необходимость словить событие отправки CF7 и проверить поле с номером телефона на совпадение с номерами в БД. Однако даже упростив код до:
$a = 123;
add_filter( 'wpcf7_skip_mail', 'maybe_skip_mail', 10, 2 );

function maybe_skip_mail( $skip_mail, $contact_form ) {

    if($a == 123)
        $skip_mail = true;

    return $skip_mail;

}

ничего не работает... Пробовал даже событие wpcf7_before_send_mail, все попусту, вечно крутится кружочек отправки.
А нужно сделать чтоб если переменная $a == 123, чтоб ничего не отправлялось и выводилось сообщение, что такой номер есть в базе, а если нет, то все отправлялось как и без фильтра...
  • Вопрос задан
  • 1190 просмотров
Решения вопроса 1
HeadOnFire
@HeadOnFire
PHP, Laravel & WordPress Evangelist
wpcf7_skip_mail - это фильтр, который контролирует отправку письма при сабмите формы. Фильтр может возвращать true (письмо не будет отправлено) или false (письмо будет отправлено). Вся остальная логика работы обработчика формы не меняется. Если именно такое поведение вам нужно - тогда работайте с ним.

Ваша проверка не работает, потому что переменная $a находится вне области видимости функции maybe_skip_mail(). Это приводит к тому, что PHP генерирует ошибку, которая выводится в ответе и ломает формат этого самого ответа - поэтому кружочек и крутится.

function maybe_skip_mail( $skip_mail ) 
{
    if ( ! empty( $_POST['your_field_name'] ) ) {

        // Use appropriate sanitization method.
        $value = sanitize_text_field( $_POST['your_field_name'] );

        // Check whether this value already exists in the database.
        $result = ... // Your query here. Must return boolean.

        return $result;
    }

	return $skip_mail;
}
add_filter( 'wpcf7_skip_mail', 'maybe_skip_mail' );

Это основа, поиск номера в базе думаю сами сделаете.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы