将数量字段添加到 WooCommerce 商店页面上的 Ajax 添加到购物车按钮 [英] Add a quantity field to Ajax add to cart button on WooCommerce shop page

查看:35
本文介绍了将数量字段添加到 WooCommerce 商店页面上的 Ajax 添加到购物车按钮的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是 Woocommerce 的新手.我试图在商店页面中显示数量框.我使用了下面的代码,它按预期工作:

I am new to Woocommerce. I was trying to show the quantity box in the shop page. I have used the below code and it's working as expected:

add_action( 'woocommerce_before_shop_loop', 'handsome_bearded_guy_select_variations' );

function handsome_bearded_guy_select_variations() {
remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10 );
add_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_single_add_to_cart', 30 );
}

但问题是 ajax 添加到购物车按钮被默认按钮替换了.

But the problem is that ajax add to cart button got replaced with default one.

如何为 Woocommerce 档案页面启用添加到购物车按钮带有数量字段的 ajax 功能?

How can I enable back the ajax functionality on add to cart button with quantity field for Woocommerce archives pages?

推荐答案

更新 2021年

对于从 3.2 到 5+ 的 WooCommerce 版本,优化了 jQuery 代码并删除了数量错误.添加到购物车后添加数量重置.

以下自定义函数挂钩在 woocommerce_loop_add_to_cart_link 过滤器挂钩中,并为 WooCommerce 存档页面和其他产品循环上的每个产品添加数量输入字段.我们在这里主要使用原始的 WooCommerce 代码.

The following custom function is hooked in woocommerce_loop_add_to_cart_link filter hook and adds a quantity input field to each product on WooCommerce archives pages and other product loops. We use here mostly the original WooCommerce code.

当客户更改数量时,需要一些 jQuery 代码来更新添加到购物车按钮上的 data-quantity 属性.可能需要一些样式,这取决于您的客户希望(和您的主题).

A bit of jQuery code is necessary to update the data-quantity attribute on the add to cart button when customer changes the quantity. Some styling might be needed, depending on your client wishes (and on your theme).

用于隐藏查看购物车"的附加部分按钮位于末尾.

代码:

add_filter( 'woocommerce_loop_add_to_cart_link', 'quantity_inputs_for_loop_ajax_add_to_cart', 10, 2 );
function quantity_inputs_for_loop_ajax_add_to_cart( $html, $product ) {
    if ( $product && $product->is_type( 'simple' ) && $product->is_purchasable() && $product->is_in_stock() && ! $product->is_sold_individually() ) {
        // Get the necessary classes
        $class = implode( ' ', array_filter( array(
            'button',
            'product_type_' . $product->get_type(),
            $product->is_purchasable() && $product->is_in_stock() ? 'add_to_cart_button' : '',
            $product->supports( 'ajax_add_to_cart' ) ? 'ajax_add_to_cart' : '',
        ) ) );

        // Embedding the quantity field to Ajax add to cart button
        $html = sprintf( '%s<a rel="nofollow" href="%s" data-quantity="%s" data-product_id="%s" data-product_sku="%s" class="%s">%s</a>',
            woocommerce_quantity_input( array(), $product, false ),
            esc_url( $product->add_to_cart_url() ),
            esc_attr( isset( $quantity ) ? $quantity : 1 ),
            esc_attr( $product->get_id() ),
            esc_attr( $product->get_sku() ),
            esc_attr( isset( $class ) ? $class : 'button' ),
            esc_html( $product->add_to_cart_text() )
        );
    }
    return $html;
}

add_action( 'wp_footer' , 'archives_quantity_fields_script' );
function archives_quantity_fields_script(){
    ?>
    <script type='text/javascript'>
        jQuery(function($){
            // Update data-quantity
            $(document.body).on('click input', 'input.qty', function() {
                $(this).parent().parent().find('a.ajax_add_to_cart').attr('data-quantity', $(this).val());
                $(".added_to_cart").remove(); // Optional: Removing other previous "view cart" buttons
            }).on('click', '.add_to_cart_button', function(){
                var button = $(this);
                setTimeout(function(){
                    button.parent().find('.quantity > input.qty').val(1); // reset quantity to 1
                }, 1000); // After 1 second

            });
        });
    </script>
    <?php
}

代码位于您的活动子主题(活动主题)的functions.php 文件中.
在店面主题的 WooCommerce 4.1.1 版和 WordPress 4.5.1 版上进行了测试和工作.

隐藏查看购物车";按钮 (使用 Ajax 添加到购物车时):

1).您可以将此 CSS 规则添加到位于活动主题中的 style.css 文件中:

1). You can add this CSS rule to the styles.css file located in your active theme:

a.added_to_cart.wc-forward {
    display:none;
}

2).您可以使用以下挂钩函数(第一个选项是最好的方法):

2). You can use the following hoocked function (first option is the best way):

add_action( 'wp_head' , 'hide_ajax_view_cart_button' );
function hide_ajax_view_cart_button(){
    if( is_shop() || is_product_category() || is_product_tag() ): ?>
    <style>
        a.added_to_cart.wc-forward {
            display:none;
        }
    </style>
    <?php endif;
}

代码位于您的活动子主题(活动主题)的 function.php 文件中.

这篇关于将数量字段添加到 WooCommerce 商店页面上的 Ajax 添加到购物车按钮的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆