Как добавить рекапчу в покупки в один клик
Чтобы добавить reCaptcha в форму покупки в один клик, нужно добавить такой код в файл functions.php дочерней темы
add_action( 'init', function () {
$public_key = '***';
$secret_key = '***';
$custom_gr_verify = function ( $response ) use ( $secret_key ) {
$args = [
'body' => [
'secret' => $secret_key,
'response' => $response,
],
'sslverify' => false,
];
$resp = wp_remote_post( 'https://www.google.com/recaptcha/api/siteverify', $args );
$result = json_decode( wp_remote_retrieve_body( $resp ), true );
return ! empty( $result['success'] );
};
add_action( 'wp_enqueue_scripts', function () use ( $public_key ) {
$js = <<<"JS"
jQuery(function ($){
$(document).on('click', '.js-buy-one-click', function (e){
setTimeout(function (){
grecaptcha.render( 'myCaptcha', {
'sitekey' : '{$public_key}',
'theme' : 'light'
});
}, 50);
});
});
JS;
wp_enqueue_script( 'custom-g-recaptcha', 'https://www.google.com/recaptcha/api.js?render=explicit', [ 'bono-scripts' ] );
wp_add_inline_script( 'custom-g-recaptcha', $js, 'after' );
} );
add_filter( 'bono_one_click_buy:filters', function ( $inputs ) {
$before = array_slice( $inputs, 0, 3 );
$after = count( $inputs ) > 3 ? array_slice( $inputs, 3 ) : [];
return array_merge( $before, [
[
'render_callback' => function () {
?>
<div id="myCaptcha" style="margin: 15px 0 15px"></div>
<?php
},
],
], $after );
} );
add_filter( 'bono_one_click_buy:validate', function ( $errors, $data ) use ( $custom_gr_verify ) {
if ( ! $custom_gr_verify( $_POST['g-recaptcha-response'] ) ) {
$errors['myCaptcha'] = 'Error';
}
return $errors;
}, 10, 2 );
} );
В этом коде нужно не забыть указать свои значения публичного и приватного ключей.
Если используется плагин reCaptcha by BestWebSoft, то тогда нужно использоваться такой код
add_action( 'init', function () {
global $gglcptch_options;
if ( ! $gglcptch_options ) {
return;
}
$public_key = $gglcptch_options['public_key'];
$secret_key = $gglcptch_options['private_key'];
$custom_gr_verify = function ( $response ) use ( $secret_key ) {
$args = [
'body' => [
'secret' => $secret_key,
'response' => $response,
],
'sslverify' => false,
];
$resp = wp_remote_post( 'https://www.google.com/recaptcha/api/siteverify', $args );
$result = json_decode( wp_remote_retrieve_body( $resp ), true );
return ! empty( $result['success'] );
};
add_action( 'wp_enqueue_scripts', function () use ( $public_key ) {
$js = <<<"JS"
jQuery(function ($){
$(document).on('click', '.js-buy-one-click', function (e){
setTimeout(function (){
grecaptcha.render( 'myCaptcha', {
'sitekey' : '{$public_key}',
'theme' : 'light'
});
}, 50);
});
});
JS;
wp_enqueue_script( 'custom-g-recaptcha', 'https://www.google.com/recaptcha/api.js?render=explicit', [ 'bono-scripts' ] );
wp_add_inline_script( 'custom-g-recaptcha', $js, 'after' );
} );
add_filter( 'bono_one_click_buy:filters', function ( $inputs ) {
$before = array_slice( $inputs, 0, 3 );
$after = count( $inputs ) > 3 ? array_slice( $inputs, 3 ) : [];
return array_merge( $before, [
[
'render_callback' => function () {
?>
<div id="myCaptcha" style="margin: 15px 0 15px"></div>
<?php
},
],
], $after );
} );
add_filter( 'bono_one_click_buy:validate', function ( $errors, $data ) use ( $custom_gr_verify ) {
if ( ! $custom_gr_verify( $_POST['g-recaptcha-response'] ) ) {
$errors['myCaptcha'] = 'Error';
}
return $errors;
}, 10, 2 );
} );
ключи, соответственно будут браться из настроек плагина.
Вам помог ответ?