Woocommerce在新会话中删除购物车中的所有商品

时间:2017-04-05 17:51:56

标签: php wordpress 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

我不知道为什么。请问我该怎么做呢。

2 个答案:

答案 0 :(得分: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()返回一些内容。

答案 1 :(得分:-1)

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

add_action( 'template_redirect', 'clear_cart_on_it' ); 

add_action( 'wp_loaded', 'clear_cart_on_it' );