/>
/>
add( 'invalid_recaptcha', __( 'Registration failed', 'rcp' ), 'register' );
return;
}
// Skip on validation step (to ensure we only do this once).
if ( ! empty( $data['validate_only'] ) ) {
return;
}
$verify = wp_safe_remote_post(
'https://www.google.com/recaptcha/api/siteverify',
array(
'body' => array(
'secret' => trim( $rcp_options['recaptcha_private_key'] ),
'response' => $data['g-recaptcha-response'],
'remoteip' => $data['g-recaptcha-remoteip']
)
)
);
$verify = json_decode( wp_remote_retrieve_body( $verify ) );
if ( 2 === rcp_get_recaptcha_version() ) {
/**
* Validate reCAPTCHA v2 response
*/
if ( empty( $verify->success ) || true !== $verify->success ) {
rcp_errors()->add( 'invalid_recaptcha', __( 'Registration failed', 'rcp' ), 'register' );
}
return;
} else {
/**
* Validate reCAPTCHA v3 response
*/
/**
* Filters the score threshold. Scores lower than this will be rejected.
*/
$score_threshold = apply_filters( 'rcp_recaptcha_score_threshold', 0.5 );
$score = ! empty( $verify->score ) ? $verify->score : 0;
rcp_log( sprintf( 'reCAPTCHA score: %s / %s', $score, $score_threshold ) );
if ( empty( $verify->success ) || true !== $verify->success || empty( $verify->action ) || 'register' !== $verify->action || $score < $score_threshold ) {
rcp_errors()->add( 'invalid_recaptcha', __( 'Registration failed', 'rcp' ), 'register' );
if ( isset( $verify->{'error-codes'} ) ) {
rcp_log( sprintf( 'reCAPTCHA errors: %s', var_export( $verify->{'error-codes'}, true ) ), true );
}
}
}
}
add_action( 'rcp_form_errors', 'rcp_validate_captcha' );