我知道会有这类问题,但我已经尝试了几乎没有运气的所有选项,所以我在这里问。
订单完成后,我发现cart
在woocommerce中不是空的,而且有些用户只是将商品添加到购物车然后不去结账,并且在某一天再次回来之后他们仍然看到旧购物车。
我认为这可能是缓存问题,因为我正在使用W3-total-cache
插件。
我想在结账后清除购物车数据,或者如果用户将商品添加到购物车而不是结帐,一段时间后又回来购物,那么购物车必须是空的,不应该将旧会话存储到购物车。
我尝试下面的代码,但没有运气:
function nom_empty_cart_init_login(){
$opt = get_option('nom_empty_cart_browser_close_do_login');
$opt = $opt != 1 ? false : true;
if( $opt ){
session_destroy();
}
}
// destroy session on user logout
function nom_empty_cart_init_logout(){
$opt = get_option('nom_empty_cart_browser_close_do_logout');
$opt = $opt != 1 ? false : true;
if( $opt ){
session_destroy();
}
}
add_action('admin_menu','nom_empty_cart_init_admin_init');
function nom_empty_cart_init_admin_init(){
add_options_page( 'Woocommerce Clear Cart on Browser Closing', 'WC Clear Cart on Browser Close', 'manage_options', 'wc-clear-cart-on-browser-close', 'wc_clear_cart_on_browser_close' );
}
function wc_clear_cart_on_browser_close(){
if( isset( $_REQUEST['save_accconc'] ) and wp_verify_nonce($_REQUEST['wc-clear-cart-on-browser-close-name'],'wc-clear-cart-on-browser-close-action')):
// SAVING THE FORM DATA
// enable wcccobc
if( isset($_REQUEST['enable_wcccobc']) )
update_option('nom_empty_cart_browser_close_enable',1);
// enable wcccobc on login
if( isset($_REQUEST['enable_wcccobc_on_login']) )
update_option('nom_empty_cart_browser_close_do_login',1);
// enable wcccobc on logout
if( isset($_REQUEST['enable_wcccobc_on_logout']) )
update_option('nom_empty_cart_browser_close_do_logout',1);
// SAVING ;) ENDS
endif;
?>
<div class="wrap">
<div class="inside">
<h2>Woocommerce Clear Cart on Browser Closing</h2>
<p>Note: the cart will be empty if the visitor close the whole browser, not just the widow. (will be updated soon)</p>
<form action="<?php admin_url('options-general.php?page=wc-clear-cart-on-browser-close');?>" method="post">
<?php wp_nonce_field('wc-clear-cart-on-browser-close-action','wc-clear-cart-on-browser-close-name')?>
<p>
<input id="enable_wcccobc" type="checkbox" class="checkbox" name="enable_wcccobc" value="1" <?php checked(get_option('nom_empty_cart_browser_close_enable'),'1');?>>
<label for="enable_wcccobc" >Enable clear cart on browser closing</label>
</p>
<p>
<input id="enable_wcccobc_on_login" type="checkbox" class="checkbox" name="enable_wcccobc_on_login" value="1" <?php checked(get_option('nom_empty_cart_browser_close_do_login'),1);?>>
<label for="enable_wcccobc_on_login" >Enable clear cart on on user login</label>
</p>
<p>
<input id="enable_wcccobc_on_logout" type="checkbox" class="checkbox" name="enable_wcccobc_on_logout" value="1" <?php checked(get_option('nom_empty_cart_browser_close_do_logout'),1);?>>
<label for="enable_wcccobc_on_logout">Enable clear cart on user logout</label>
</p>
<p>
<input type="submit" class="button-primary" value="Save" name="save_accconc">
</p>
</form>
</div>
</div>
<?php
}
我也在许多WooCommerce网站上遇到过这个问题。如果WooCommerce在下订单后没有清除购物车,那么您也可以按照自己的方式执行此操作。
在活动主题的functions.php文件中添加以下代码。下订单后应该清楚购物车。
add_action( 'woocommerce_checkout_order_processed', 'order_received_empty_cart_action', 10, 1 );
function order_received_empty_cart_action( $order_id ){
WC()->cart->empty_cart();
}
我希望这对你有用。
谢谢