Support » Plugins » stop refresh of shop page after add to cart

  • Hi there,

    Thanks in advance for your help.

    I have added some code to make it possible to add multiple quantities of products from the shop page in woocommerce. http://www.playimports.com.au/shop/ (you won’t be able to see the quantity on the front end unless you are logged in). Hopefully you can help me nonetheless, or I can private message you some login details. I have added this to /woocommerce/loop/add-to-cart.php

    <?php
    /**
     * Loop Add to Cart
     *
     * @author 		WooThemes
     * @package 	WooCommerce/Templates
     * @version     2.1.0
     */
    
    if ( ! defined( 'ABSPATH' ) ) {
    	exit; // Exit if accessed directly
    }
    
    global $product;
    
    echo apply_filters( 'woocommerce_loop_add_to_cart_link',
    	sprintf( '<a href="%s" rel="nofollow" data-product_id="%s" data-product_sku="%s" data-quantity="%s" class="button %s product_type_%s">%s</a>',
    		esc_url( $product->add_to_cart_url() ),
    		esc_attr( $product->id ),
    		esc_attr( $product->get_sku() ),
    		esc_attr( isset( $quantity ) ? $quantity : 1 ),
    		$product->is_purchasable() && $product->is_in_stock() ? 'add_to_cart_button' : '',
    		esc_attr( $product->product_type ),
    		esc_html( $product->add_to_cart_text() )
    	),
    $product );
    
    if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly.
    
    global $product;
    ?>
    
    <?php if ( ! $product->is_in_stock() ) : ?>
    
        <a href="<?php echo apply_filters( 'out_of_stock_add_to_cart_url', get_permalink( $product->id ) ); ?>" class="button"><?php echo apply_filters( 'out_of_stock_add_to_cart_text', __( 'Read More', 'woocommerce' ) ); ?></a>
    
    <?php else : ?>
    
        <?php
            $link = array(
                'url'   => '',
                'label' => '',
                'class' => ''
            );
    
            switch ( $product->product_type ) {
                case "variable" :
                    $link['url']    = apply_filters( 'variable_add_to_cart_url', get_permalink( $product->id ) );
                    $link['label']  = apply_filters( 'variable_add_to_cart_text', __( 'Select options', 'woocommerce' ) );
                break;
                case "grouped" :
                    $link['url']    = apply_filters( 'grouped_add_to_cart_url', get_permalink( $product->id ) );
                    $link['label']  = apply_filters( 'grouped_add_to_cart_text', __( 'View options', 'woocommerce' ) );
                break;
                case "external" :
                    $link['url']    = apply_filters( 'external_add_to_cart_url', get_permalink( $product->id ) );
                    $link['label']  = apply_filters( 'external_add_to_cart_text', __( 'Read More', 'woocommerce' ) );
                break;
                default :
                    if ( $product->is_purchasable() ) {
                        $link['url']    = apply_filters( 'add_to_cart_url', esc_url( $product->add_to_cart_url() ) );
                        $link['label']  = apply_filters( 'add_to_cart_text', __( 'Add to cart', 'woocommerce' ) );
                        $link['class']  = apply_filters( 'add_to_cart_class', 'add_to_cart_button' );
                    } else {
                        $link['url']    = apply_filters( 'not_purchasable_url', get_permalink( $product->id ) );
                        $link['label']  = apply_filters( 'not_purchasable_text', __( 'Read More', 'woocommerce' ) );
                    }
                break;
            }
    
            // If there is a simple product.
            if ( $product->product_type == 'simple' ) {
                ?>
                <form action="<?php echo esc_url( $product->add_to_cart_url() ); ?>" class="cart" method="post" enctype="multipart/form-data">
                    <?php
                        // Displays the quantity box.
                        woocommerce_quantity_input();
                    ?>
                    <button type="submit" class="button alt"><?php echo $link['label']; ?></button>
                </form>
                <?php
            } else {
              echo apply_filters( 'woocommerce_loop_add_to_cart_link', sprintf('<a href="%s" rel="nofollow" data-product_id="%s" data-product_sku="%s" class="%s button product_type_%s">%s</a>', esc_url( $link['url'] ), esc_attr( $product->id ), esc_attr( $product->get_sku() ), esc_attr( $link['class'] ), esc_attr( $product->product_type ), esc_html( $link['label'] ) ), $product, $link );
            }
    
        ?>
    
    <?php endif; ?>

    It works great, however it refreshes the page when a product is added to the cart, and I want to remain at the same point on the page after our customers add a product to the cart.

    I have taken the code from this page: https://claudiosmweb.com/woocommerce/woocommerce-loop-de-produtos-com-quantidade/

    There is an option for AJAX code on this page, however, when I use this code it still doesn’t work – the page still refreshes.

    Thanks for your help!

    Cheers,
    Sarah

Viewing 1 replies (of 1 total)
  • softsleepysounds

    (@softsleepysounds)

    This is the code in the functions file:

    <?php
    function cs_wc_loop_add_to_cart_scripts() {
        if ( is_shop() || is_product_category() || is_product_tag() || is_product() ) : ?>
    
    <script>
        jQuery( document ).ready( function( $ ) {
            $( document ).on( 'change', '.quantity .qty', function() {
                $( this ).parent( '.quantity' ).next( '.add_to_cart_button' ).attr( 'data-quantity', $( this ).val() );
            });
        });
    </script>
    
        <?php endif;
    }
    add_action( 'wp_footer', 'cs_wc_loop_add_to_cart_scripts' );

    Is there some way I can add to this or delete something so that the page does not refresh?

    Thanks!

Viewing 1 replies (of 1 total)
  • The topic ‘stop refresh of shop page after add to cart’ is closed to new replies.