2017-04-05 128 views
1

我想要在新会话启动时清除购物车中的所有物品。我试过Woocommerce在新会话中从购物车中删除所有物品

add_action('init', 'clear_cart_on_it'); 
function clear_cart_on_it() { 
    global $woocommerce; 
    $woocommerce->cart->empty_cart(); 
} 

这是引发此错误:

Fatal error: Call to a member function empty_cart() on null in /home/shuggapa/public_html/wp-content/plugins/candy-scoops/scoops.php on line 53 

我不知道为什么。请如何执行此操作。

回答

-1

在你的代码中,在Woocommerce对象被实例化之前触发init钩子。你可以用这个钩子:

add_action('template_redirect', 'clear_cart_on_it'); 

add_action('wp_loaded', 'clear_cart_on_it'); 
+0

'woocommerce_init'似乎是合适的[hook](https://docs.woocommerce.com/wc-apidocs/source-class-WooCommerce.html#446)。 – kontur

0

添加到@“Vidish Purohit”的回答,你要另外确认引荐,并使用更合适的挂钩。

在页面发起删除,使用:

<form method="post"> 
    <input type="hidden" name="action" value="empty_cart"> 
    <?php wp_nonce_field("empty_cart", "empty_cart"); ?> 
    <button type="submit">Remove all</button> 
</form> 

要处理删除,添加这个钩子在你的函数:

add_action('woocommerce_init', 'my_woocommerce_init'); 
function my_woocommerce_init() { 
    if (isset($_POST["action"]) && $_POST["action"] === "empty_cart") { 
     wp_verify_nonce("empty_cart", "empty_cart"); 
     WC()->cart->empty_cart(); 
    } 
} 

首先,它会检查提交发生($_POST['action']现在和匹配),然后wp_verify_nonce检查POST是否确实是从可靠来源启动的。

而最重要的是,woocommerce_init挂钩确保全球WC()返回的东西工作。

相关问题