如何解决如何限制购物车并停留在当前页面上?
我正在使用WooCommerce,并试图将购物车限制为仅10种产品。在我的TargetNullValue
中使用以下代码,即可正常运行。
functions.php
但是,有一个问题,我昨天才注意到,直到现在我都找不到解决方案。
用于将产品添加到购物车的AJAX不再起作用。 WooCommerce的设置中有一个选项可以启用AJAX添加到购物车功能,该功能已启用,但由于上面的代码而不再起作用。
当我尝试将产品添加到购物车并且购物车中的产品已经是10个时,它会将我重定向到单个产品页面。不应该那样,我想保留ajax功能,而只是将购物车限制在10种产品之内。
解决方法
我想将此添加为注释,但是出于代码格式的考虑,我将其作为答案。
发生重定向到单个产品页面的原因是 将产品添加到购物车时出错。默认情况下,这是 可以像这样工作。
在woocommerce-ajax.php中,您将看到它的工作原理。
function woocommerce_ajax_add_to_cart() {
global $woocommerce;
check_ajax_referer( 'add-to-cart','security' );
$product_id = apply_filters('woocommerce_add_to_cart_product_id',absint( $_POST['product_id'] ) );
$quantity = empty( $_POST['quantity'] ) ? 1 : apply_filters( 'woocommerce_stock_amount',$_POST['quantity'] );
$passed_validation = apply_filters('woocommerce_add_to_cart_validation',true,$product_id,$quantity );
if ( $passed_validation && $woocommerce->cart->add_to_cart( $product_id,$quantity ) ) {
do_action( 'woocommerce_ajax_added_to_cart',$product_id );
if ( get_option( 'woocommerce_cart_redirect_after_add' ) == 'yes' ) {
woocommerce_add_to_cart_message( $product_id );
$woocommerce->set_messages();
}
// Return fragments
woocommerce_get_refreshed_fragments();
} else {
header( 'Content-Type: application/json; charset=utf-8' );
// If there was an error adding to the cart,redirect to the product page to show any errors
$data = array(
'error' => true,'product_url' => apply_filters('woocommerce_cart_redirect_after_error',get_permalink( $product_id ),$product_id)
);
$woocommerce->set_messages();
echo json_encode( $data );
}
die();
}
add_action('wp_ajax_woocommerce_add_to_cart','woocommerce_ajax_add_to_cart');
如果$passed_validation
为true,那么它将正常通过ajax将产品添加到购物车中,因为您现在已经用钩子woocommerce_add_to_cart_validation
和woocommerce_update_cart_validation
将其设置为false重定向到单个产品页面以显示错误消息是正常的。
我有两种不同的解决方法。
-
将其保留,接受以下事实:一旦将产品添加到购物车时发生错误,它将重定向到单个产品页面。例如,您可以做的是通过添加通知消息。
function limid_cart_allowed_cart_update( $passed,$cart_item_key,$values,$updated_quantity ) { $cart_items_count = WC()->cart->get_cart_contents_count(); $original_quantity = $values['quantity']; $total_count = $cart_items_count - $original_quantity + $updated_quantity; if( $cart_items_count > 10 || $total_count > 10 ){ // Set to false $passed = false; // Display a message wc_add_notice( __( "You can’t have more than 10 items in cart","woocommerce" ),"error" ); } return $passed; } // Checking and validating when updating cart item quantities when products are added to cart add_filter( 'woocommerce_update_cart_validation','limid_cart_allowed_cart_update',10,4 );
-
覆盖
wp_ajax_woocommerce_add_to_cart
钩子以不返回URL。
WooCommerce插件的最小和最大数量允许您设置订单和组中产品成本的限制以及产品数量,产品变化,订单中产品和组中产品的限制。您可以将产品和产品变型添加到组中。无限数量的组。
参考:https://mahbub.me/how-to-limit-min-and-max-quantity-for-woocommerce/
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。