Введение. Что такое капча от Яндекса.
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 (лежит в корне вашей темы) добавить код проверки капчи и вывода самого поля проверки.
Читайте также Как изменить слово "Рубрика" в названии категории WordPress
В самом верху после открывающего тега <?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 найдете выше.
На этом установка Капчи от Яндекс завершена. По этому же алгоритму вы можете интегрировать ее на любую свою систему.
Если остались вопросы, то вы можете оставить комментарий и мы поможем с установкой!