我正在建立一个带结账的网站,该网站有2个产品,需要单独出售。因此,为了防止人们添加第一个项目,离开购物车,然后添加第二个项目,我想设置购物车自动清空。所以我决定在主页上测试一下。我的初始功能是:
function my_empty_cart(){
global $woocommerce;
$woocommerce->cart->empty_cart();
}
add_action('init', 'my_empty_cart');
完美无缺。但由于这个原因,购物车总是空着的。所以我决定添加一个“if”语句:
function my_empty_cart() {
global $woocommerce;
if ( is_front_page() && isset( $_GET['empty-cart'] ) ) {
$woocommerce->cart->empty_cart();
}
}
add_action( 'init', 'my_empty_cart' );
这根本不起作用......我用“is_home”和“is_page”(带有各种页面标题和ID)尝试过它。我甚至尝试删除“&& isset”部分,只是为了测试。在这一点上,我迷失了,我从来没有遇到过这么简单的PHP代码的困难,而且我现在正在拔出我的头发。有什么简单的东西,我只是没有看到?
答案 0 :(得分:1)
这对我有用(不依赖于WordPress条件):
/*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'] === '/') {
$woocommerce->cart->empty_cart();
}
}
答案 1 :(得分:0)
条件标签(is_home(),is_front_page()等)在“init”挂钩触发时不起作用。你可以用'wp'钩子代替。它在设置wp类对象后立即运行(http://codex.wordpress.org/Plugin_API/Action_Reference/wp)。
function my_empty_cart() {
global $woocommerce;
if ( is_front_page() && isset( $_GET['empty-cart'] ) ) {
$woocommerce->cart->empty_cart();
}
}
add_action( 'wp', 'my_empty_cart' );