我想在新会话开始时清除购物车中的所有商品。我试过了
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
我不知道为什么。请问我该怎么做呢。
答案 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' );