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

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

18.09.2022

28

Защитим разные формы 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)

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

Поделиться в соц. сетях:

  • Похожие записи
  • Комментарии
  • Вложения
Связывание товаров

Связывание товаров

Если товары продаются несколькими частями, но части нужно связать чтобы одну без другой нельзя было приобрести, можно связать такие товары. Как вариант такие товары можно заводить как один товар (в Читать далее »

Поле для вариативного товара

Поле для вариативного товара

Как делать произвольные (пользовательские) поля для товаров Woocommerce описано здесь. Но теперь пойдем дальше — сделаем поле для вариативного товара. Это должно открыть горизонты для интересных решений. Но я предвижу Читать далее »

Кнопки WC

Кнопки WC

Давно хотел подробно разобрать тему с кнопками WC. Кнопки меняют свой вид и функционал в зависимости от типа продукта, наличия, и других факторов. Так же в движке магазина Woocommerce множество Читать далее »

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

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

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