我已经在我的课程会员网站上跳过购物车,所以'立即购买'带你直接结帐。
但是,如果您在点击“立即购买”时登录然后在没有购买的情况下退出,下次您登录时该商品仍保留在购物车中。如果您在下次访问期间购买同一商品,则会显示"此商品已在您的购物车中"但由于我从前端隐藏了购物车,他们无法访问它。
当页面使用WooCommerce重新加载时是否可以清空购物车,因此当用户点击“立即购买”时,它总是直接结帐?
答案 0 :(得分:1)
似乎你是在单独销售产品。在此解决方案中,我们绕过了过滤器挂钩woocommerce_add_to_cart_sold_individually_found_in_cart
。当$found_in_cart
为true
时,用户会收到消息“此商品已在您的购物车中”。这就是我们将数量重置为1的原因。有关详细信息,请查看https://docs.woocommerce.com/wc-apidocs/source-class-WC_Cart.html#1064
function op_bypass_add_to_cart_sold_individually_found_in_cart( $found_in_cart, $product_id ) {
if ( $found_in_cart ) {
$cart_contents = WC()->cart->get_cart_contents();
foreach ( $cart_contents as $key => $item ) {
if ( $product_id === $item['product_id'] ) {
WC()->cart->set_quantity( $key, 1 );
break;
}
}
return false;
}
return $found_in_cart;
}
add_filter( 'woocommerce_add_to_cart_sold_individually_found_in_cart', 'op_bypass_add_to_cart_sold_individually_found_in_cart', 10, 2 );
答案 1 :(得分:0)
在我的情况下“WC() - > cart-> set_quantity($ key,1);”从答案@obiPlabon没有正常工作,所以我简化了功能。
由于$ found_in_cart只有当购物车中单独销售的产品数量超过一个时才会启动,我决定简化代码,只是在运行时重定向到结帐页面。
if ( $found_in_cart ) {
global $woocommerce;
wp_redirect( wc_get_checkout_url() );
exit;
}