В данной статье рассмотрим подключение капчи от гугл на стандартные отзывы к статьям WordPress. Конечно существуют плагины выполняющие такие задачи, но на сайте, который мне пришлось обслуживать они почему-то не работали.
Итак начнем. Первое, что необходимо сделать это получить ключи API key pair тут.
Я использую reCAPTCHA v.2 . Итак, первое, что нам нужно сделать это добавить саму капчу в форму на сайте. Я сделал это, добавив к форме блок див, в который после загружается сама капча. Добавляем код вызова капчи сразу после вызова формы comment_form().
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
comment_form($args); ?> <!--RECaptcha--> <script type="text/javascript"> var onloadCallback = function() { //Добавляем div блок сразу после всех input-полей формы jQuery(".form-submit").append('<div id="recaptcha"></div>'); //ниже функция, которая рисует капчу в добавленном выше блоке. Вместо -=sitekey=- впишите ваш site key grecaptcha.render('recaptcha', { 'theme': 'dark', 'sitekey' : '-=sitekey=-' }); }; </script> <script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit" async defer></script> <!--RECaptcha--> |
Проверяем появилась ли капча на сайте. Если все ок, то далее нужно будет добавить фильтр, который выполняется до обработки данных формы. В этом фильтре мы запросим результаты проверки посетителя на робота и, в случае, если он не прошел проверку, выведем сообщение об ошибке.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
add_filter('preprocess_comment', 'preprocess_comment'); function preprocess_comment($commentdata) { $paramsArray = array( // Ваш секретный ключ 'secret' => '-=secretkey=-', 'response' => $_POST['g-recaptcha-response'] ); $vars = http_build_query($paramsArray); $options = array( 'http' => array( 'method' => 'POST', 'header' => 'Content-type: application/x-www-form-urlencoded', 'content' => $vars ) ); $context = stream_context_create($options); $result = file_get_contents('https://www.google.com/recaptcha/api/siteverify', false, $context); $result = json_decode($result); // Если проверку не прошли, пишем сообщение со ссылкой на предыдущую страницу. if(!$result->success){ $capreply = '<p>Мы подозреваем, что вы робот, приятель!<br><a href="'.$_SERVER['HTTP_REFERER'].'">Назад</a></p>'; wp_die($capreply); } //Если проверка пройдена, данные формы передаются далее на обработку. return $commentdata; } |
Оставить комментарий