WooCommerce 如果用户转到当前结帐页面以外的页面或网站,则清空购物车



我不确定这是否是正确的问题,但我仍然没有找到任何解决方案。我正在尝试创建一种方法,当用户转到当前结帐页面以外的页面/站点时,用户的购物车将自动清空。我想知道这是否可能,因为我已经改变了我的定制电子商店的购买流程。我尝试过在互联网上搜索并尝试了许多方法,但似乎不起作用。我目前很难理解WooCommerce的钩子和功能是如何工作的。

现在,让我告诉你们我的代码从一开始就是如何工作的:-

这些是显示整个可用产品的页面的代码。如您所见,当用户想要购买产品时,他们将单击"购买"按钮,我的电子商店将自动将该产品添加到购物车中。

<?php
// Querying of product information retrieval
$args = array( 'post_type' => 'product', 'posts_per_page' => 4, 'orderby' =>'menu_order', 'order' =>'ASC');
$loop = new WP_Query( $args );
// Display each retrieved product
while ( $loop->have_posts() ) : 
$loop->the_post();
// WooCommerce global product variable
global $product;
global $woocommerce;

the_title();
the_excerpt();
echo $product->get_price_html();
$id = $product->id;
?>
/**** Select the product & automatically add to cart ****/
<a href="<?php echo do_shortcode('[add_to_cart_url id="' . $id . '"]'); ?>"><button type="button"> BUY</button></a>
<?php endwhile; ?>
<?php wp_reset_query(); // After the loop ended, quit the custom loop and reset back the main loop 
?>

当我的电子商店完成"添加到购物车"流程后,用户将被重定向到结帐页面。它的功能如下。

add_filter ('add_to_cart_redirect', 'redirect_to_checkout');
function redirect_to_checkout() {
global $woocommerce;
$checkout_url = $woocommerce->cart->get_checkout_url();
return $checkout_url;
}

基本上我想说的是,用户在点击购买该产品后将直接重定向到结帐页面。此方法跳过了"单个产品"页面和"添加到购物车"页面。

但是现在,我需要帮助来确定正确的方法,如果用户退出该页面或注销,购物车将自动清空。可能吗?如果没有,对不起,我缺乏知识。

我一直在尝试下面的代码,因为它是最接近我想要它做的。 关闭,但不起作用。

add_action( 'init', 'woocommerce_clear_cart_url' );
function woocommerce_clear_cart_url() {
  global $woocommerce;
    if ( !is_page('93') ) { 
        $woocommerce->cart->empty_cart(); 
    }
}

使用上述功能,每当我尝试返回主页,或转到其他链接并再次单击购买时,购物车都会不断添加。这件事让我失去理智。我希望你们能帮助我。

这是

一条非常危险的路径,因为当任何其他选项卡处于活动状态时,打开您网站的多个选项卡的用户将受到清除购物车代码的影响。

WordPress 条件在init时不起作用(现在使用 is_page('93') 还为时过早)。 所以使用不依赖于WordPress条件的东西:

获取is_page('93')的页面网址,让我们说:www.domain.name/checkout

然后在函数中使用此代码.php:

/*empty cart if user come to homepage*/
add_action( 'init', 'woocommerce_clear_cart_url' );
function woocommerce_clear_cart_url() {
global $woocommerce;
if ($_SERVER['REQUEST_URI'] !=== '**www.domain.name/checkout**') { 
    $woocommerce->cart->empty_cart(); 
 }
}

相关内容

最新更新