/ Плагины / Защита Woocommerce от СПАМа

Защита Woocommerce от СПАМа

18.09.2022

543

Защитим разные формы Woocommerce от надоедливого СПАМа.

Защита форма регистрации

Функция по защите формы регистрации, без плагина.

Включаем скрипт

// Подключение reCaptcha

add_action('wp_head', 'wp34_add_recaptcha');
function wp34_add_recaptcha() {?>
    <script src="https://www.google.com/recaptcha/api.js" async defer></script>
<?php }

Далее регистрируем сайт в сервисе Google reCaptcha (тестировал на v2, работает) добавляем в форму регистрации (файл woocommerce/myaccount/form-login.php) специальный блок:

<form class="woocommerce-form woocommerce-form-login login" method="post">

	<?php do_action( 'woocommerce_login_form_start' ); ?>

	<p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide">
		<label for="username"><?php esc_html_e( 'Username or email address', 'woocommerce' ); ?>&nbsp;<span class="required">*</span></label>
		<input type="text" class="woocommerce-Input woocommerce-Input--text input-text" name="username" id="username" autocomplete="username" value="<?php echo ( ! empty( $_POST['username'] ) ) ? esc_attr( wp_unslash( $_POST['username'] ) ) : ''; ?>" /><?php // @codingStandardsIgnoreLine ?>
	</p>
	<p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide">
		<label for="password"><?php esc_html_e( 'Password', 'woocommerce' ); ?>&nbsp;<span class="required">*</span></label>
		<input class="woocommerce-Input woocommerce-Input--text input-text" type="password" name="password" id="password" autocomplete="current-password" />
	</p>

	<?php do_action( 'woocommerce_login_form' ); ?>

	<p class="form-row">
		<label class="woocommerce-form__label woocommerce-form__label-for-checkbox woocommerce-form-login__rememberme">
			<input class="woocommerce-form__input woocommerce-form__input-checkbox" name="rememberme" type="checkbox" id="rememberme" value="forever" /> <span><?php esc_html_e( 'Remember me', 'woocommerce' ); ?></span>
		</label>
		<?php wp_nonce_field( 'woocommerce-login', 'woocommerce-login-nonce' ); ?>
		<button type="submit" class="woocommerce-button button woocommerce-form-login__submit" name="login" value="<?php esc_attr_e( 'Log in', 'woocommerce' ); ?>"><?php esc_html_e( 'Log in', 'woocommerce' ); ?></button>
	</p>
	<p class="woocommerce-LostPassword lost_password">
		<a href="<?php echo esc_url( wp_lostpassword_url() ); ?>"><?php esc_html_e( 'Lost your password?', 'woocommerce' ); ?></a>
	</p>
	
	<!-- Add reCaptcha here -->
        <div class="g-recaptcha" data-sitekey="КЛЮЧ САЙТА !!!"></div>
        
	<?php do_action( 'woocommerce_login_form_end' ); ?>

</form>

И добавляем функцию проверки этого поля

// Внедрение проверки reCaptcha в форму регистрации
// В самой форме регистрации (woocommerce/myaccount/form-login.php) нужно добавить
// <div class="g-recaptcha" data-sitekey="your_site_key"></div>

add_action( 'woocommerce_register_post', 'woo6912_validate_recaptcha_field', 10, 3 );
function woo6912_validate_recaptcha_field( $username, $email, $wpErrors ) {
    $remoteIP = $_SERVER['REMOTE_ADDR'];
    $recaptchaResponse = $_POST['g-recaptcha-response'];

    $response = wp_remote_post( 'https://www.google.com/recaptcha/api/siteverify', [
        'body' => [
            'secret'   => 'СЕКРЕТНЫЙ КЛЮЧ !!!',
            'response' => $recaptchaResponse,
            'remoteip' => $remoteIP
        ]
    ] );

    $response_code = wp_remote_retrieve_response_code( $response );
    $response_body = wp_remote_retrieve_body( $response );

    if ( $response_code == 200 )
    {
        $result = json_decode( $response_body, true );

        if ( ! $result['success'] )
        {
            switch ( $result['error-codes'] )
            {
                case 'missing-input-secret':
                case 'invalid-input-secret':
                    $wpErrors->add( 'recaptcha', __( '<strong>ОШИБКА</strong>: Неверный ключ reCAPTCHA.', 'woocommerce' ) );
                    break;

                case 'missing-input-response' :
                case 'invalid-input-response' :
                    $wpErrors->add( 'recaptcha', __( '<strong>ОШИБКА</strong>: Поставьте галочку, чтобы подтвердить, что вы не робот.', 'woocommerce' ) );
                    break;

                default:
                    $wpErrors->add( 'recaptcha', __( '<strong>ОШИБКА</strong>: Что-то пошло не так при проверке reCAPTCHA.', 'woocommerce' ) );
                    break;
            }
        }
    }
    else
    {
        $wpErrors->add( 'recaptcha_error', __( '<strong>Error</strong>: Unable to reach the reCAPTCHA server.', 'woocommerce' ) );
    }
}

Защита отзывов к товарам

Плагин reCAPTCHA in WP comments form (10 000)

Работает плагин корректно. Простые настройки и функционал.

[site-socialshare]
  • Похожие записи
  • Комментарии
  • Вложения
Общая библиотека мультисети

Общая библиотека мультисети

При создании сети (multisite) сайтов возникла проблема с медиабиблиотекой. Проблема состояла в том что главный сайт уже долгое время функционирует, на нем более 500 товаров с несколькими изображениями в каждом. Читать далее »

Отключить кнопку Купить (чекбокс)

Отключить кнопку Купить (чекбокс)

Сделаем возможность у некоторых товаров отключать кнопку купить. Добавляем поле (чекбокс) Скрываем кнопку Добавить в корзину в карточке товара Изменяем кнопку В корзину в категориях Тут не получится отключить хуком, Читать далее »

Woocommerce основы

Woocommerce основы

Наиболее часто встречающиеся и необходимые вызовы при использовании плагина woocommerce, а так же прочие хитрости при работе с woocommerce. <?php echo $_product->get_sku( $cart_item ); ?> // Вывести артикул в корзине Читать далее »

Добавить комментарий

Пока нет комментариев. Будь первым!

Защита Woocommerce от СПАМа
HTML полезности
Рекомендации для васHTML полезностиOpttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.