[英]Woocommerce: force to clear the cart after an order is placed in my site?
我在我的 Woocommerce 網站中經常遇到一個問題,即在我的網站上下訂單后購物車沒有被清除。
我想在 my_theme/functions.php 中添加一個代碼以確保購物車被清除。 我設法創建了此代碼(如下)。
這足以得到我需要的東西嗎?
add_action('woocommerce_new_order','clear_the_cart');
function clear_the_cart()
{
global $woocommerce;
$woocommerce->cart->empty_cart();
}
我是否需要添加代碼來獲取用戶 ID,然后清除該用戶的購物車?
如果為每個用戶而不是所有用戶清除購物車,我想我將需要獲取當前用戶 ID,然后在執行代碼行后為該用戶清除購物車。
我的問題是我應該按用戶還是全局清理購物車?
我知道如何獲取用戶 ID:
$user_ID = get_current_user_id();
....
添加到 function.php 后,您的方法應該可以正常工作。
您也可以使用WC()->cart->empty_cart();
調用它WC()->cart->empty_cart();
. empty_cart()
有一個$clear_persistent_cart
參數,但默認為 true,所以你的代碼沒問題。
如果woocommerce_before_cart_emptied
鈎子上沒有任何奇怪的鈎子,您可以檢查您的主題和插件,該鈎子在empty_cart()
方法的開頭觸發。
empty_cart()
只會清空當前用戶的購物車(傳遞訂單的那個),如果此代碼沒有被其他服務器執行(例如:隊列):客戶的會話數據將可用,因此可以清空購物車. 這不會清除每個客戶購物車的內容。
現在,Woocommerce 應該在訂單完成后默認清除購物車。 這里有幾件事情可以嘗試和測試:
add_action( 'woocommerce_new_order', 'clear_the_cart', 50, 3 );
更改您的 add_action add_action( 'woocommerce_new_order', 'clear_the_cart', 50, 3 );
, 增加 $priority 最后運行woocommerce_order_status_completed
鈎子進行測試clear_the_cart()
方法中添加wp_die()
或相關的,以驗證此代碼是否在您的訂單后觸發請注意,某些插件(以及掛鈎上的一些自定義代碼)可以防止購物車在訂單完成后清空(請參閱)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.