Замените уведомление "добавлено в корзину" на JS Sweet Alert в WooCommerce - PullRequest
0 голосов
/ 26 февраля 2019

Я удалил стандартное сообщение «Добавлено в корзину», предоставленное WooCommerce.Затем я добавил код, который использует Sweet Alert.Идея состоит в том, чтобы удалить все сообщения «добавлено в корзину» и использовать только сладкое оповещение.

На основе " JS-оповещение о добавлении ajax в корзину для определенного количества категорий товаров в Woocommerce" код ответа @LoicTheAztec, мой код работает для первого добавленного продукта, , но не для следующих. Так что он отлично работает, когда корзина пуста и при добавлении первого продукта.

Вот код, который я использую:

// remove add to cart woocommerce message
add_filter('wc_add_to_cart_message_html', '__return_null');

// Wordpress Ajax PHP
add_action('wp_ajax_nopriv_checking_items', 'atc_sweet_message');
add_action('wp_ajax_checking_items', 'atc_sweet_message');

function atc_sweet_message() {
    if (isset($_POST['id']) && $_POST['id'] > 0) {
        $count = 0;
        $product_id = $_POST['id'];
        foreach(WC()-> cart-> get_cart() as $cart_item) {
            $count += $cart_item['quantity'];
        }
    }
    echo $count;
    die();
}

// jQuery Ajax
add_action('wp_footer', 'item_count_check');
function item_count_check() {
    if (is_checkout())
        return; 
    ?> 
    <script src="https://unpkg.com/sweetalert2@7.20.1/dist/sweetalert2.all.js"></script>
    <script type="text/javascript">
    jQuery( function($) {
        if ( typeof wc_add_to_cart_params === 'undefined' )
            return false;

        $(document.body).on( 'added_to_cart', function( event, fragments, cart_hash, $button ) {
            $.ajax({
                type: 'POST',
                url: wc_add_to_cart_params.ajax_url,
                data: {
                    'action': 'checking_items',
                    'id'    : $button.data( 'product_id' )
                },
                success: function (response) {
                    if(response == 1 ){
                        const toast = swal.mixin({
                            toast: true,
                            showConfirmButton: false,
                            timer: 3000
                        });
                        toast({
                            type: 'success',
                            title: 'Product Added To Cart'
                        })
                    }
                }
            });
        });
    });
    </script>
    <?php
}

Я попытался удалить if(response == 1 ){, но безуспешно.Любой вклад в это приветствуется.

1 Ответ

0 голосов
/ 27 февраля 2019

В вашем коде были небольшие ошибки в функции Wordpress Ajax PHP.Попробуйте следующее:

// remove add to cart woocommerce message
add_filter('wc_add_to_cart_message_html', '__return_null');

// Wordpress Ajax PHP
add_action('wp_ajax_nopriv_item_added', 'addedtocart_sweet_message');
add_action('wp_ajax_item_added', 'addedtocart_sweet_message');
function addedtocart_sweet_message() {
    echo isset($_POST['id']) && $_POST['id'] > 0 ? (int) esc_attr($_POST['id']) : false;
    die();
}

// jQuery Ajax
add_action('wp_footer', 'item_count_check');
function item_count_check() {
    if (is_checkout())
        return;
    ?>
    <script src="https://unpkg.com/sweetalert2@7.20.1/dist/sweetalert2.all.js"></script>
    <script type="text/javascript">
    jQuery( function($) {
        if ( typeof wc_add_to_cart_params === 'undefined' )
            return false;

        $(document.body).on( 'added_to_cart', function( event, fragments, cart_hash, $button ) {
            var $pid = $button.data('product_id');

            $.ajax({
                type: 'POST',
                url: wc_add_to_cart_params.ajax_url,
                data: {
                    'action': 'item_added',
                    'id'    : $pid
                },
                success: function (response) {
                    if(response == $pid){
                        const toast = swal.mixin({
                            toast: true,
                            showConfirmButton: false,
                            timer: 3000
                        });
                        toast({
                            type: 'success',
                            title: 'Product Added To Cart'
                        })
                    }
                }
            });
        });
    });
    </script>
    <?php
}

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

Теперь работает для всех добавленных в корзину элементов ajax (и не только для первого) .

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...