#php #wordpress #contact-form-7
#php #wordpress #contact-form-7
Вопрос:
Я работаю над многоязычным сайтом конкурса, на котором пользователям разрешено регистрироваться только один раз. Я использую контактную форму 7 с плагином CFDB. Используя приведенный ниже код, предоставленный автором CFDB, эта функция проверяет, отправлена ли форма уже;
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;
}
наряду со следующим кодом, который проверяет форму, чтобы убедиться, что нет дубликатов электронной почты (именно так я намерен обнаруживать повторяющихся пользователей)
function one_user_per_contest($result, $tag) {
$formName = array('Contest Form', 'Contest form ES'); // This is the form name for English and spanish
$fieldName = 'your-email'; // Name of the field to validate, which is the email field
$errorMessage = "you've signed up already"; // 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_email*', 'one_user_per_contest', 20, 2);
Эта проверка работает нормально, поскольку не допускает дублирования электронной почты, но проблема, с которой я столкнулся, и я хотел бы получить некоторые указания, заключается в том, что я хочу, чтобы сообщение об ошибке отображалось в качестве ответа. вместо ответа One or more fields have an error. Please check and try again.
я хочу, чтобы он сказал you've signed up already
[см. Изображение ниже];
Спасибо
Комментарии:
1. Где строка ‘Одно или несколько полей содержат ошибку. Пожалуйста, проверьте и повторите попытку. «откуда, точно? Вы искали это? Ах, вероятно, из проверки контактной формы 7.. Взлом заключался бы в замене строки на JavaScript :-/
2. Вы проверили, вызывается ли ваша функция one_user_per_contest(), и достигнуты ли первое и второе if?
3. Функция invalidate передает
invalidate->invalid_fields
массив с ‘reason’ в качестве ключа. См. contact-form-7/includes/validation.php4. @jasie В «Одном или нескольких полях есть ошибка. Пожалуйста, проверьте и попробуйте еще раз.» является ли сообщение по умолчанию CF7 «Произошли ошибки проверки», и да, функция one_user_per_contest () работает, просто не отображает сообщение в качестве ответа (чего я и хочу добиться)
5. @HowardE В этом примере тег $необходим для предотвращения отправки формы. я не уверен, как записать это в массив после проверки contact-form-7/includes/validation.php строка 7 (т.е. строка public function __construct)