Сообщения об ошибках проверки затухания на странице оформления заказа WooCommerce

#javascript #php #jquery #woocommerce #checkout

#javascript #php #jquery — jquery — запрос #woocommerce (веб-магазин) #Оформить покупку #jquery #woocommerce

Вопрос:

При размещении заказа WooCommerce проверяет все вводимые пользователем поля. Если нет, сообщения об ошибках оформления заказа отображаются, например, если отсутствует первое имя и так далее.

Я хочу, чтобы эти сообщения о проверке ошибок исчезали через определенное время.

Итак, я ввел этот код jQuery:

 (function($) {
    var wooError = $('.woocommerce-error'); 
    wooError.delay(4000).fadeOut(160);
})
(jQuery);
  

Пока .woocommerce-error класс не находится внутри form.checkout , он работает нормально, например, при входе в систему или регистрации. Но это не работает на странице оформления заказа.

Класс .woocommerce-error правильный (он есть), но затухание не запускается.

Итак, я продолжил поиск в Интернете. Нашел другой подход, дождаться checkout_error события страницы оформления заказа, вот так:

 $( document.body ).on( 'checkout_error', function(){
    var wooError = $('.woocommerce-error'); 
    wooError.delay(4000).fadeOut(160);
})
(jQuery);
  

Но это не работает.

Кто-нибудь может мне сказать, почему я не могу вызвать исчезновение .woocommerce-error класса, пока он находится внутри формы оформления заказа?

Как вызвать исчезновение сообщений о проверке ошибок при оформлении заказа?

Ответ №1:

Попробуйте следующий код, используя setTimeout() вместо delay() , который приведет к исчезновению любого сообщения об ошибке на странице оформления заказа с задержкой в 4 секунды и длительностью в 160 миллисекунд:

 // Checkout JS
add_action( 'wp_footer', 'checkout_fadeout_error_message');
function checkout_fadeout_error_message() {
    // Only on front-end and checkout page
    if( is_checkout() amp;amp; ! is_wc_endpoint_url() ) :
    ?>
    <script>
    jQuery(function($){
        $(document.body).on( 'checkout_error', function(){
            var wooError = $('.woocommerce-error');
            setTimeout(function(){
                wooError.fadeOut(160);
            }, 4000);
        })
    });
    </script>
    <?php
    endif;
}
  

Код вводится function.php файл вашей активной дочерней темы (или active theme). Протестировано и работает.

Комментарии:

1. Спасибо тебе, приятель. Я попробую. Выглядит удобнее, чем я предполагал.

Ответ №2:

Наконец-то я нашел способ. Если это кому-то еще нужно, вот как это работает:

 (function($) {
    $( document.body ).on( 'checkout_error', function(){
        var wooError = $('.woocommerce-error'); 
        wooError.delay(4000).fadeOut(160);
    })
})   
(jQuery);
  

После 13 часов кодирования и прочего иногда вы не видите очевидного.