Задать вопрос
@DMax921

ReCaptcha в комментариях выводится только Не авторизованным, как сделать для всех?

Нашел в сети код, который добавляет 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;
}


Заранее большое спасибо!
  • Вопрос задан
  • 106 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
baskserg
@baskserg
Better skills, better life.
// Вместо этого хука
/*
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;
}*/

// Вставьте этот
add_filter('comment_form_submit_button', 'filter_comment_form_submit_button', 10, 2);

function filter_comment_form_submit_button($submit_button) {
    $recaptcha_site_key = 'Ключ';
    echo '<div class="g-recaptcha" data-sitekey="'.$recaptcha_site_key.'"></div>';

    $submit_before = '<div class="form-group">';
    $submit_after = '</div>';
    return $submit_before . $submit_button . $submit_after;
}

// В последнем хуке удалите проверку юзера, получится так
add_action('preprocess_comment', "preprocess_comment_cb");

function preprocess_comment_cb($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;
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы