Введение. Что такое капча от Яндекса.
Yandex SmartCaptcha – это антиспам система, разработанная компанией Яндекс. Она использует искусственный интеллект и машинное обучение для определения, является ли пользователь человеком или роботом. Это позволяет защитить сайты от автоматизированных атак, спама и других видов нежелательной активности. Yandex SmartCaptcha предлагает простой и удобный интерфейс для пользователей, а также эффективную защиту для веб-сайтов.
Выглядит она следующим образом (капча установлена на форме отправке комментария к статье, можете увидеть ее “в живую”):
Как установить капчу от Яндекс на сайт WordPress
В примере мы разберем установку капчи в форму “Добавить комментарий”, но вы сможете использовать код в своих формах, достаточно будет подключить к ним обработчик, который мы будем использовать ниже.
Создайте капчу
- В консоли управления выберите каталог.
- Выберите сервис Yandex SmartCaptcha.
- Нажмите кнопку Создать капчу.
- Введите имя капчи (любое название, которое будет понятно вам).
- Выберите сложность
Medium
или который подходит вам. - Укажите список сайтов, на которых будет размещаться капча.
- Типа конфигурации оставьте стандартным.
- Нажмите кнопку Создать.
Подключение капчи
После того, как вы создали капчу, можем переходить к её интеграции на сайт WordPress, подключать будем к форме отправке комментарий.
Подключение скрипта в header
В файле header.php перед закрывающим тегом </head> добавить подключение скрипта
<script src="https://captcha-api.yandex.ru/captcha.js" defer></script>
Работа с файлом function.php
Далее, что необходимо сделать, в файл function.php (лежит в корне вашей темы) добавить код проверки капчи и вывода самого поля проверки.
В самом верху после открывающего тега <?php определяем две константы с ключами, которые мы получили при создании капчи (где найти – смотрим скрин #1 и скрин #2)
define('SMARTCAPTCHA_SITE_KEY', 'ВАШ_КЛЮЧ_SMARTCAPTCHA_SITE_KEY'); define('SMARTCAPTCHA_SERVER_KEY', 'ВАШ_КЛЮЧ_SMARTCAPTCHA_SERVER_KEY');
Добавляем поле проверки капчи в форму
Далее нам необходимо добавить поле с проверкой в форму комментирования, в том же файле functions.php, после наших констант вставляем хук добавления кастомного поля в форму
add_action( 'comment_form_logged_in_after', 'add_yandex_captcha_field' ); function add_yandex_captcha_field() { echo '<div style="max-width: 300px" id="captcha-container" class="smart-captcha" data-sitekey='.SMARTCAPTCHA_SITE_KEY.' ></div>'; echo'</span></p>'; }
Данный html-код, который выводится в echo вы можете использовать в своих формах, где нужно добавить Яндекс Капчу.
Валидации запроса
При отправке формы автоматически сработает функция verify_yandex_captcha_field, которая отправит запрос в Яндекс на проверку
add_filter( 'preprocess_comment', 'verify_yandex_captcha_field' ); function verify_yandex_captcha_field( $commentdata ) { // ничего не делаем если это ответ на комментарий if ( isset( $_REQUEST['action'] ) && $_REQUEST['action'] === 'replyto-comment' ) { return $commentdata; } if ( empty( $_POST['smart-token'] ) || !yandex_check_captcha($_POST['smart-token']) ) { $captchaError = new WP_Error( 'failure-check-captcha', '<b>Ошибка:</b> Проверка Yandex Smart Captcha не пройдена. Попробуйте снова.', 101); wp_die( '<p>' . $captchaError->get_error_message() .$_POST['smart-captcha']. '</p>', __( 'Comment Submission Failure' ), array( 'response' => $captchaError, 'back_link' => true, ) ); } return $commentdata; }
Код отправки данных пользователя в Яндекс
// Yandex Captcha Validate Request function yandex_check_captcha($token) { if(!$token){ return false; } $ch = curl_init(); $args = http_build_query([ "secret" => SMARTCAPTCHA_SERVER_KEY, "token" => $token, "ip" => $_SERVER['REMOTE_ADDR'], // Нужно передать IP пользователя. // Как правильно получить IP зависит от вашего прокси. ]); curl_setopt($ch, CURLOPT_URL, "https://captcha-api.yandex.ru/validate?$args"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 1); $server_output = curl_exec($ch); $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if ($httpcode !== 200) { echo "Allow access due to an error: code=$httpcode; message=$server_output\n"; return false; } $resp = json_decode($server_output); return $resp->status === "ok"; }
Всё. Теперь наша форма комментирования записей работает с антиспам системой от Яндекс – Yandex Smart Captcha!
Если вы хотите интегрировать капчу в другие формы, вам достаточно будет в вашей форме разместить html код поля:
<div style="max-width: 300px" id="captcha-container" class="smart-captcha" data-sitekey='.SMARTCAPTCHA_SITE_KEY.'></div>
При валидации данных формы вызвать обработчик капчи – yandex_check_captcha и передать в нее $_POST[‘smart-token’], исходный код yandex_check_captcha найдете выше.
На этом установка Капчи от Яндекс завершена. По этому же алгоритму вы можете интегрировать ее на любую свою систему.
Если остались вопросы, то вы можете оставить комментарий и мы поможем с установкой!