Контактная форма 7 не прошла проверку

Мне нужна контактная форма 7, чтобы отправить одно электронное письмо после проверки не удалось. Затем отправьте обычное письмо CF7, когда форма будет отправлена ​​правильно. Смешно я знаю, но клиенты!

Я думаю, что я относительно близок со следующим:

function send_failed_vaildation_email( $data ) {
$messagesend = 'Name:' . $_POST['your-name'];
$messagesend .= '\r\nEmail:' .$_POST['email'];
$messagesend .= '\r\nPhone:' .$_POST['validPhone'];
$messagesend .= '\r\nRate:' .$_POST['rate'];
$messagesend .= '\r\nBased:' .$_POST['based'];
wp_mail('c******y@gmail.com', 'failed validation mail', $messagesend );
}
add_filter("wpcf7_posted_data", "send_failed_vaildation_email");

Однако при этом отправляются все представления независимо от того, прошли они проверку или не прошли проверку.

wpcf7_before_send_mail не годится, так как срабатывает только после того, как представление прошло проверку.

Я либо ищу другой крючок, чтобы использовать вместо wpcf7_posted_data который срабатывает только при сбое валидации или при условии, что я могу разместить wp_mail для того же эффекта.

заранее спасибо

2

Решение

Это не было проверено, но я уверен, что вам нужно подключиться к get_invalid_fields () пример. Что-то вроде:

function send_failed_vaildation_email() {
$submission = WPCF7_Submission::get_instance();
$invalid_fields = $submission->get_invalid_fields();

$posted_data = $submission->get_posted_data();

if ( !empty( $invalid_fields ) ) {
$messagesend = 'Name:' . $posted_data['your-name'];
$messagesend .= '\r\nEmail:' . $posted_data['email'];
$messagesend .= '\r\nPhone:' . $posted_data['validPhone'];
$messagesend .= '\r\nRate:'  . $posted_data['rate'];
$messagesend .= '\r\nBased:' . $posted_data['based'];
wp_mail('c******y@gmail.com', 'failed validation mail', $messagesend );
}
}
add_filter("wpcf7_posted_data", "send_failed_vaildation_email");

Вы можете увидеть процесс отправки формы в плагине trac.

РЕДАКТИРОВАТЬ: Я также только что заметил 'wpcf7_validation_error' зацепить контакт-form.php…Это может быть все, что вам нужно, так как он срабатывает только при возникновении ошибки.

1

Другие решения

Вот как мне удалось заставить его работать.

Ответ @ rnevius терпел неудачу, потому что wpcf7_posted_data Фильтр применяется перед проверкой данных, поэтому в это время нет ничего недопустимого.

Объединяя ответ @rnevius с wpcf7_submit фильтр, и он работает, как ожидалось.

Полный код:

function send_failed_vaildation_email() {
$submission = WPCF7_Submission::get_instance();
$invalid_fields = $submission->get_invalid_fields();

$posted_data = $submission->get_posted_data();

if ( !empty( $invalid_fields ) ) {
$messagesend = 'Name:' . $posted_data['your-name'];
$messagesend .= '\r\nEmail:' . $posted_data['email'];
$messagesend .= '\r\nPhone:' . $posted_data['validPhone'];
$messagesend .= '\r\nRate:'  . $posted_data['rate'];
$messagesend .= '\r\nBased:' . $posted_data['based'];
$messagesend .= count($invalid_fields);
wp_mail('c*******y@gmail.com', 'failed validation mail', $messagesend );
}
}
add_filter("wpcf7_submit", "send_failed_vaildation_email");
1

ОБНОВЛЕННЫЙ КОД ДЛЯ ПОСЛЕДНЕЙ КОНТАКТНОЙ ФОРМЫ 7

function is_gmail($email) {
if(substr($email, -10) == '@gmail.com') {
return true;
} else {
return false;
};
};

function custom_email_validation_filter($result, $tag) {
$tag = new WPCF7_Shortcode( $tag );
if ( 'your-email' == $tag->name ) {
$the_value = isset( $_POST['your-email'] ) ? trim( $_POST['your-email'] ) : '';
if(!is_gmail($the_value)){
$result->invalidate( $tag, "Are you sure this is the correct address?" );
};
};
return $result;
};add_filter('wpcf7_validate_email','custom_email_validation_filter', 20, 2); // Email field
add_filter('wpcf7_validate_email*', 'custom_email_validation_filter', 20, 2); // Required Em
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector