Как добавить рекапчу в покупки в один клик

Чтобы добавить 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 );
} );

ключи, соответственно будут браться из настроек плагина.

Вам помог ответ?
Похожие вопросы
Как на мобильном "Меню в шапке" вывести под "Меню под шапкой"?
+8
Как вывести содержание поста (оглавление)?
+4
Как включить комментарии на страницах?
+4
Как добавить и настроить телефонные номера?
+38
Как добавить код статистики/счетчика?
+3
Как вывести блок автора на странице записи?
+3
Как в рекламные блоки вставить код php?
+3
Как добавить табу на страницу товара
+3
Как изменить тип миниатюры на странице записи?
+2
Как поменять названия вкладок (табов)
+2
Как добавить раздел блога в Bono
+2
Как вставить Instagram запись?
+2
Как добавить рандомное количество просмотров?
+2
Как перевести конструктор главной
+2
Как вывести соц. кнопки шаринга на странице записи?
+2
Как вывести рейтинг на странице записи?
+2
Как выровнять меню под шапкой по центру?
+19
Миниатюры неправильного размера (растянутые, квадратные, обрезанные и т.д.)
+18
Как убрать поле "Сайт" из формы комментирования?
+18
Как вывести рекламу на страницах?
+14