Intereting Posts
wp-cli: wp term generate xxxxx – Ошибка: «xxxxx» не является зарегистрированной таксономией Добавьте встроенный стиль на страницы, где использовался короткий код Использование meta_query с несколькими ключами и сравнение значений заголовки в последних сообщениях появляются вместе на всех языках с qtranslate Все обновленные плагины исчезли Сделать страницы вложений потребует базового URL-адреса Как установить многодисковый плагин для многосайтового сервера экземпляров ec2 обработка данных csv с пользовательским типом сообщения Правильно встраивать javascript в WP (используя функцию.php) – не работает? Twitter-канал показывает пустое место на сайте WP Добавить и сохранить дополнительные поля – Комментарии WordPress Список всех сообщений в таксономии Как я могу получить внешнее изображение нестандартного размера сообщения Как узнать, какие переменные передаются в фильтре / действии и каково их значение? Как использовать manage_ $ post_type_posts_columns с подчеркиванием в типе post?

Проверка Ajax для reCaptcha

Задний план

У меня есть форма регистрации, которая проверяется с помощью AJAX с использованием механизма проверки jQuery . Форма была создана с использованием Theme My Login и содержит reCaptcha, который я реализовал с помощью WP-reCAPTCHA .

Как и остальные поля, мне нужно было проверить reCaptcha с помощью AJAX , то есть без обновления всей страницы. До сих пор мне удалось заставить его работать, когда Captcha не подтвердил. Но когда это подтвердилось , т.е. вход был верным, страница обновилась, но с сообщением об ошибке, в котором говорится , что ответ «RECAPTCHA был неправильным» . Таким образом, форма не была сохранена.

Я попытался использовать console.log() чтобы проверить вывод, а результат – «valid». Поэтому я не могу сказать, где я ошибся.

В настоящее время я тестирую это локально с помощью XAMPP .

Код, который я использовал

Javascript:

 (function($){ // Validate Captcha $.fn.validateCaptcha = function() { challengeField = $('input#recaptcha_challenge_field').val(); responseField = $('input#recaptcha_response_field').val(); $.ajax({ type: 'POST', url: the_ajax_script.ajaxurl, data: 'action=validate_captcha&recaptcha_challenge_field=' + challengeField + '&recaptcha_response_field=' + responseField, async: false, success:function(result) { //console.log( result ); if(result != 'Valid') { $('#captchaError').html('<p class="error">The security code you entered did not match. Please try again.</p>'); $captchaFlag = 'Invalid'; Recaptcha.reload(); } else { $('#memberInformation span').css({'color':'green'}); $('#memberInformation span').html(html.message).show(3000); $('#captchaError').html('<p>Success!</p>'); $captchaFlag = 'Valid'; dataString = form.serializeArray(); getSearchMembers(dataString); } } }).responseText; } $('#registerform').submit(function() { var form = $(this); if (form.validationEngine('validate')) { $('#memberInformation span').html(''); form.validateCaptcha(); } else { $('#memberInformation span').css('color','#ff0000').html('Please fill out required fields').show(3000); } return false; }); })(jQuery); 

PHP:

 function validate_Captha() { $privatekey = "xxxxxxxxxx"; //<!----- private key here $resp = recaptcha_check_answer ($privatekey, $_SERVER["REMOTE_ADDR"], $_POST["recaptcha_challenge_field"], $_POST["recaptcha_response_field"]); if (!$resp->is_valid) { // Incorrect CAPTCHA input echo "Error\n"; die ("The reCAPTCHA wasn't entered correctly. Please go back and try it again.\n(reCAPTCHA said: " . $resp->error . ")"); } else { echo "Valid"; die(); } } add_action( 'wp_ajax_validate_captcha', 'validate_Captha' ); add_action( 'wp_ajax_nopriv_validate_captcha', 'validate_Captha' ); 

Solutions Collecting From Web of "Проверка Ajax для reCaptcha"

Просто выяснилось, что reCaptcha фактически отклоняет CAPTCHA, которые отправляются на их сервер более одного раза . Поскольку я использовал плагин WP-reCAPTCHA , плагин повторно отправил CAPTCHA после отправки AJAX. Поэтому я просто прокомментировал строку из плагина, который выполняет представление, которое находится в файле recaptcha.php , строка 27:

 $this->register_filters();