代码之家  ›  专栏  ›  技术社区  ›  Greg Minaya

如何添加到购物车而不重新加载网页上的Woomerce?

  •  1
  • Greg Minaya  · 技术社区  · 6 年前

    我用这段代码来完成:

    /**
     * Replace add to cart button in the loop.
     */
    function iconic_change_loop_add_to_cart() {
        remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10 );
        add_action( 'woocommerce_after_shop_loop_item', 'iconic_template_loop_add_to_cart', 10 );
    }
    
    add_action( 'init', 'iconic_change_loop_add_to_cart', 10 );
    
    /**
     * Use single add to cart button for variable products.
     */
    function iconic_template_loop_add_to_cart() {
        global $product;
    
        if ( ! $product->is_type( 'variable' ) ) {
            woocommerce_template_loop_add_to_cart();
        return;
        }
    
    remove_action( 'woocommerce_single_variation', 'woocommerce_single_variation_add_to_cart_button', 20 );
        add_action( 'woocommerce_single_variation', 'iconic_loop_variation_add_to_cart_button', 20 );
    
        woocommerce_template_single_add_to_cart();
    }
    
    /**
     * Customise variable add to cart button for loop.
     *
     * Remove qty selector and simplify.
     */
    function iconic_loop_variation_add_to_cart_button() {
        global $product;
    
        ?>
        <div class="woocommerce-variation-add-to-cart variations_button">
            <button type="submit" class="single_add_to_cart_button button"><?php echo esc_html( $product->single_add_to_cart_text() ); ?></button>
            <input type="hidden" name="add-to-cart" value="<?php echo absint( $product->get_id() ); ?>" />
            <input type="hidden" name="product_id" value="<?php echo absint( $product->get_id() ); ?>" />
            <input type="hidden" name="variation_id" class="variation_id" value="0" />
        </div>
        <?php
    }
    

    很好用,但是如果你把一个产品添加到购物车中,也会将你发送到该产品的页面。所以我添加了这段代码,这样页面就可以重新加载了。

    function iconic_add_to_cart_form_action( $redirect ) {
        if ( ! is_archive() ) {
            return $redirect;
        }
    
        return '';
    }
    add_filter( 'woocommerce_add_to_cart_form_action', 'iconic_add_to_cart_form_action' );
    

    有人能帮我吗?我想添加产品,而不需要重新加载或将客户发送到另一页。

    1 回复  |  直到 6 年前
        1
  •  1
  •   kashalo    6 年前

    当我为这个“添加到购物车”按钮添加了一个ID时,只需将您的图标“循环”变体“添加到购物车”按钮功能更改为此:

    /**
     * Customise variable add to cart button for loop.
     *
     * Remove qty selector and simplify.
     */
      function iconic_loop_variation_add_to_cart_button()
    {
        global $product;
    
        ?>
        <div class="woocommerce-variation-add-to-cart variations_button">
            <button   type="submit" class="custom_add_to_cart single_add_to_cart_button button"><?php echo esc_html($product->single_add_to_cart_text()); ?></button>
            <input type="hidden" name="add-to-cart" value="<?php echo absint($product->get_id()); ?>" />
            <input type="hidden" name="product_id" value="<?php echo absint($product->get_id()); ?>" />
            <input type="hidden" name="variation_id" class="variation_id" value="0" />
        </div>
        <?php
    }
    

    jQuery(document).ready(function ($) {
      "use strict";
    
      $('.custom_add_to_cart').click(function (e) {
        e.preventDefault();
        var id = $(this).next().next().attr('value');
        var data = {
          product_id: id,
          quantity: 1
        };
        $(this).parent().addClass('loading');
        $.post(wc_add_to_cart_params.wc_ajax_url.toString().replace('%%endpoint%%', 'add_to_cart'), data, function (response) {
    
          if (!response) {
            return;
          }
          if (response.error) {
            alert("Custom Massage ");
            $('.custom_add_to_cart').parent().removeClass('loading');
            return;
          }
          if (response) {
    
            var url = woocommerce_params.wc_ajax_url;
            url = url.replace("%%endpoint%%", "get_refreshed_fragments");
            $.post(url, function (data, status) {
              $(".woocommerce.widget_shopping_cart").html(data.fragments["div.widget_shopping_cart_content"]);
              if (data.fragments) {
                jQuery.each(data.fragments, function (key, value) {
    
                  jQuery(key).replaceWith(value);
                });
              }
              jQuery("body").trigger("wc_fragments_refreshed");
            });
            $('.custom_add_to_cart').parent().removeClass('loading');
    
          }
    
        });
    
     });
    });
    

    我刚刚在本地主机上测试了你的代码,一切正常