Php woocommerce使用ajax类将价格添加到购物车按钮

Php woocommerce使用ajax类将价格添加到购物车按钮,php,wordpress,woocommerce,Php,Wordpress,Woocommerce,在研究此问题后,我发现了将价格添加到“添加到购物车”按钮的代码,如下所示: [$50加入购物车] 由于某些原因,代码没有使用ajax类,因此当单击按钮时,页面将重新加载。正常的默认按钮将使用ajax类,因此当单击它时,它不会重新加载页面,但会显示一条消息,表明它已添加到购物车中 我正在通过将文件add-to-cart.php添加到我位于\woocommerce\loop\add-to-cart.php的主题来覆盖它 以下是不使用ajax类的代码: echo apply_filters( 'woo

在研究此问题后,我发现了将价格添加到“添加到购物车”按钮的代码,如下所示:

[$50加入购物车]

由于某些原因,代码没有使用ajax类,因此当单击按钮时,页面将重新加载。正常的默认按钮将使用ajax类,因此当单击它时,它不会重新加载页面,但会显示一条消息,表明它已添加到购物车中

我正在通过将文件add-to-cart.php添加到我位于\woocommerce\loop\add-to-cart.php的主题来覆盖它

以下是不使用ajax类的代码:

echo apply_filters( 'woocommerce_loop_add_to_cart_link',
    sprintf( '<a href="%s" rel="nofollow" data-product_id="%s" data-product_sku="%s" class="button product_type_simple add_to_cart_button ajax_add_to_cart">%s %s</a>',
        esc_url( $product->add_to_cart_url() ),
        esc_attr( $product->id ),
        esc_attr( $product->get_sku() ),
        $product->is_purchasable() ? 'add_to_cart_button' : '',
        esc_attr( $product->product_type ),
        $product->get_price_html(),
        esc_attr( isset( $class ) ? $class : 'button' ),
        esc_html( $product->add_to_cart_text() )
    ),
$product );
echo应用过滤器('woocommerce\u loop\u add\u to\u cart\u link',
sprintf(“”,
esc_url($product->add_to_cart_url()),
esc_attr($product->id),
esc_attr($product->get_sku()),
$product->is_purchasable()?“添加到购物车按钮”:“,
esc_attr($product->product_type),
$product->get_price_html(),
esc_attr(isset($class)$class:‘按钮’),
esc_html($product->add_to_cart_text())
),
$product);
如何修改它以使用默认的addtocart按钮的ajax类


提前感谢

按钮已经有了绑定ajax调用的
ajax\u add\u to\u cart
类。 只需确保您已经启用了Ajax“添加到购物车”按钮

转到
Woocommerce>Settings>Products>Display
并选中
在存档上启用AJAX添加到购物车按钮

此外,它仅在您从产品存档页面添加产品时有效,在产品单个页面上不起作用


参考:

按钮已经有了绑定ajax调用的
ajax\u add\u to\u cart
类。 只需确保您已经启用了Ajax“添加到购物车”按钮

转到
Woocommerce>Settings>Products>Display
并选中
在存档上启用AJAX添加到购物车按钮

此外,它仅在您从产品存档页面添加产品时有效,在产品单个页面上不起作用


参考资料:

根据我的经验,添加到购物车模板是一个非常危险的模板。你没有说你使用的是哪个版本的WooCommerce,但我假设是2.5?我假设是因为我帮助重写了WooCommerce ajax添加到购物车的代码,以在
.ajax\u add\u to\u cart
类上触发,因为它解决了我遇到的一个复杂问题,即您的价格和订阅扩展名。但由于您正在覆盖模板,因此无法获得2.5更新

这是新的和更新的函数

您可以在第一个模板中看到传递给模板的类,在第二个模板中通过数组上的
内爆()
定义这些类。因此,要将这段代码导入到您的代码中,您将得到:

echo apply_filters( 'woocommerce_loop_add_to_cart_link',
    sprintf( '<a href="%s" rel="nofollow" data-product_id="%s" data-product_sku="%s" class="button product_type_simple add_to_cart_button ajax_add_to_cart">%s %s</a>',
        esc_url( $product->add_to_cart_url() ),
        esc_attr( $product->id ),
        esc_attr( $product->get_sku() ),
        implode( ' ', array_filter( array(
                        'button',
                        'product_type_' . $product->product_type,
                        $product->is_purchasable() && $product->is_in_stock() ? 'add_to_cart_button' : '',
                        $product->supports( 'ajax_add_to_cart' ) ? 'ajax_add_to_cart' : ''
                ) ) ),
        esc_attr( $product->product_type ),
        $product->get_price_html(),
        esc_attr( isset( $class ) ? $class : 'button' ),
        esc_html( $product->add_to_cart_text() )
    ),
$product );
echo应用过滤器('woocommerce\u loop\u add\u to\u cart\u link',
sprintf(“”,
esc_url($product->add_to_cart_url()),
esc_attr($product->id),
esc_attr($product->get_sku()),
内爆(“”,阵列过滤器(阵列(
“按钮”,
“产品类型”。$产品->产品类型,
$product->is_purchable()&&&$product->is_in_stock()?“添加到购物车按钮”:“,
$product->supports('ajax\u add\u to\u cart')?'ajax\u add\u to\u cart':''
) ) ),
esc_attr($product->product_type),
$product->get_price_html(),
esc_attr(isset($class)$class:‘按钮’),
esc_html($product->add_to_cart_text())
),
$product);

不过,我强烈建议您不要覆盖此模板。从您的代码中,我看不到任何使其不同/自定义的修改,这基本上意味着您在升级过程中会遇到问题,并且没有任何好处

根据我的经验,添加到购物车模板是一个非常危险的模板,需要重写。你没有说你使用的是哪个版本的WooCommerce,但我假设是2.5?我假设是因为我帮助重写了WooCommerce ajax添加到购物车的代码,以在
.ajax\u add\u to\u cart
类上触发,因为它解决了我遇到的一个复杂问题,即您的价格和订阅扩展名。但由于您正在覆盖模板,因此无法获得2.5更新

这是新的和更新的函数

您可以在第一个模板中看到传递给模板的类,在第二个模板中通过数组上的
内爆()
定义这些类。因此,要将这段代码导入到您的代码中,您将得到:

echo apply_filters( 'woocommerce_loop_add_to_cart_link',
    sprintf( '<a href="%s" rel="nofollow" data-product_id="%s" data-product_sku="%s" class="button product_type_simple add_to_cart_button ajax_add_to_cart">%s %s</a>',
        esc_url( $product->add_to_cart_url() ),
        esc_attr( $product->id ),
        esc_attr( $product->get_sku() ),
        implode( ' ', array_filter( array(
                        'button',
                        'product_type_' . $product->product_type,
                        $product->is_purchasable() && $product->is_in_stock() ? 'add_to_cart_button' : '',
                        $product->supports( 'ajax_add_to_cart' ) ? 'ajax_add_to_cart' : ''
                ) ) ),
        esc_attr( $product->product_type ),
        $product->get_price_html(),
        esc_attr( isset( $class ) ? $class : 'button' ),
        esc_html( $product->add_to_cart_text() )
    ),
$product );
echo应用过滤器('woocommerce\u loop\u add\u to\u cart\u link',
sprintf(“”,
esc_url($product->add_to_cart_url()),
esc_attr($product->id),
esc_attr($product->get_sku()),
内爆(“”,阵列过滤器(阵列(
“按钮”,
“产品类型”。$产品->产品类型,
$product->is_purchable()&&&$product->is_in_stock()?“添加到购物车按钮”:“,
$product->supports('ajax\u add\u to\u cart')?'ajax\u add\u to\u cart':''
) ) ),
esc_attr($product->product_type),
$product->get_price_html(),
esc_attr(isset($class)$class:‘按钮’),
esc_html($product->add_to_cart_text())
),
$product);
不过,我强烈建议您不要覆盖此模板。从您的代码中,我看不到任何使其不同/自定义的修改,这基本上意味着您在升级过程中会遇到问题,并且没有任何好处

我启用了“AJAX在存档中添加到购物车按钮”,当我使用默认的add-to-cart.php时,它可以正常工作,但是当我使用修改后的版本为按钮添加价格时,AJAX不再适用于它。文件的原始版本和修改版本没有太大区别。我只是不明白它在哪里丢失了AJAX调用。我启用了“AJAX添加到归档上的购物车按钮”,它可以正常工作