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

时间:2016-04-28 14:12:23

标签: wordpress woocommerce cart

我不确定这是否是正确的问题但仍然没有找到任何解决方案。我正在尝试创建一种方法,当用户转到当前Checkout页面以外的页面/站点时,用户的购物车将自动清空。我想知道这是否可行,因为我已经改变了我的定制电子商店的购买流程。我试过在互联网上搜索并尝试了很多方法,但似乎没有用。我目前很难理解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;
}

基本上我要说的是,用户点击购买该产品后会直接重定向到Checkout页面。此方法跳过了单个产品页面&amp;添加到购物车页面。

但是现在,我需要帮助确定正确的方法如果用户离开该页面或退出,购物车将自动为空。可能吗?如果没有,抱歉我缺乏知识。

我一直在尝试下面的代码,因为它是我想要的最接近的代码。关闭,但不能正常工作。

add_action( 'init', 'woocommerce_clear_cart_url' );
function woocommerce_clear_cart_url() {
  global $woocommerce;

    if ( !is_page('93') ) { 
        $woocommerce->cart->empty_cart(); 
    }
}

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

2 个答案:

答案 0 :(得分:1)

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

获取is_page('93')的页面网址,例如:www.domain.name/checkout

然后在functions.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(); 
 }
}

答案 1 :(得分:1)

这是一条非常危险的道路,因为当任何其他标签变为活动状态时,打开网站多个标签的用户将受到清除购物车代码的影响。