Нашел в сети код, который добавляет reCaptcha в комментарии, но проблема в том, что капча выводится только Не авторизованным пользователям, а те, которые прошли регистрацию, могут безбожно спамить, конечно-же, все комментарии с ссылками идут на модерацию, но это гемор...
Кто разберается, поправте пожалуйста, чтобы капча выводилась всем без исключений.
Вот сам код:
add_action( 'wp_enqueue_scripts', 'add_recaptcha_js', 5, 1 );
function add_recaptcha_js() {
// Регистрация reCAPTHCA api.js, version - null, in footer - false
wp_register_script( 'recaptcha', 'https://www.google.com/recaptcha/api.js?hl=en', array(), null, false );
// Подключение reCAPTHCA api.js
wp_enqueue_script( 'recaptcha' );
}
add_action('comment_form_after_fields', "recaptchadiv");
function recaptchadiv($post_id) {
global $user_ID;
$recaptcha_site_key = 'Ключ';
if ($user_ID) {
return $post_id;
}
echo '<div class="g-recaptcha" data-sitekey="'.$recaptcha_site_key.'"></div>';
return $post_id;
}
function verify_recaptcha_response() {
$recaptcha_secret_key = 'Секретный ключ';
$recaptcha_site_key = 'Ключ';
if ( isset ( $_POST['g-recaptcha-response'] ) ) {
$captcha_response = $_POST['g-recaptcha-response'];
} else {
return false;
}
// Verify the captcha response from Google
$response = wp_remote_post(
'https://www.google.com/recaptcha/api/siteverify',
array(
'body' => array(
'secret' => $recaptcha_secret_key,
'response' => $captcha_response
)
)
);
$success = false;
if ( $response && is_array( $response ) ) {
$decoded_response = json_decode( $response['body'] );
$success = $decoded_response->success;
}
return $success;
}
add_action('preprocess_comment', "preprocess_comment_cb");
function preprocess_comment_cb($commentdata) {
global $user_ID;
if ($user_ID) {
return $commentdata;
}
if ( ! verify_recaptcha_response() ) {
echo '<p style="font-size: 1rem;">You are not verified reCaptcha test. Return to the <a href="#" onclick="history.go(-1);">previous page </a> and try again.';
exit;
}
return $commentdata;
}
Заранее большое спасибо!