我正在使用 Wordpress Buddyboss Woocommerce Learndash 構建一個在線課程網站。根據我們的政策,所有用戶都必須先完成他們的個人資料才能下訂單。我能夠使用以下代碼實作這一點:
add_action('woocommerce_before_checkout_form',function(){
if (is_user_logged_in()){
$user = wp_get_current_user();
if ( bpprocn_has_incomplete_profile($user->id) ) { //check if profile is completed
if (wp_redirect(bp_core_get_user_domain( $user->id ) . bp_get_profile_slug() . '/edit/group/2')) exit; //redirect user to profile edit page
}
}
});
現在,在用戶完成他們的個人資料編輯并單擊“保存”后,我需要將他們重定向回他們的購物車。我能夠構建一個在“保存組態檔”按鈕呈現后觸發的自定義操作,并使用此操作在“保存組態檔”按鈕旁邊顯示一個鏈接。
add_action('wsk_add_continue_shop_button',function(){
$user = wp_get_current_user();
if (WC()->cart->get_cart_contents_count() && !bpprocn_has_incomplete_profile($user->id)) echo '<a href="/cart">continue shopping</a>'; // if user's cart is not empty and profile is completed, show the "continue shopping" link.
});
這當然不是最好的解決方案,因為它依賴于用戶點擊鏈接,如果一些用戶忽略了新添加的鏈接,他們的用戶體驗會很糟糕。因此,一旦用戶完成個人資料并單擊“保存個人資料”,我肯定需要自動將他們重定向回他們的購物車。
我不能簡單地wp_redirect()在上面的代碼中做,因為這會重定向那些已經完成他們的個人資料,在他們的購物車中有東西并進入個人資料編輯頁面的用戶,除非他們清除他們的這些用戶將永遠不會看到個人資料編輯頁面大車。
我對 PHP 和 Wordpress 的了解非常有限,所以在這里我需要一些建議。我能想到的一件事是檢查是否$_POST為空,如果不為空,則可能意味著用戶只需提交一些更改或他們的個人資料的新資訊,在這些情況下我可以做到wp_redirect。但是這種方法可靠嗎?如果用戶只是想編輯他的個人資料并且他的購物車中有東西,他也會被重定向,這是不需要的。
我能想到的另一個問題是,當我進行第一次重定向時(當用戶嘗試下訂單時,如果他們的個人資料不完整,則將他們重定向到他們的個人資料編輯頁面),有沒有辦法將此用戶標記為“此用戶有只是嘗試下訂單并被重定向”,這樣他就可以與那些沒有嘗試下訂單而只想編輯他們的個人資料的用戶區分開來?在我看來,這樣做我需要利用會話資料,但我對會話操作的了解幾乎為零...... wordpress 在這方面有什么幫助嗎?
uj5u.com熱心網友回復:
也許您可以使用原始的 Wordpress 事件 - profile_update。它在現有用戶更新后直接觸發。
add_action('profile_update', 'checkUserUpdate', 10, 1);
function checkUserUpdate( $user_id ) { // 檢查您的用戶組態檔是否完整并且您的 WC 購物車是否為空并將他重定向到購物車 }
uj5u.com熱心網友回復:
我想了一個辦法來解決這個問題。它似乎有效,但需要更多測驗。
add_action('woocommerce_before_checkout_form',function(){
if (is_user_logged_in()){
$user = wp_get_current_user();
if ( bpprocn_has_incomplete_profile($user->id) ) { //check if profile is completed
if (wp_redirect(bp_core_get_user_domain( $user->id ) . bp_get_profile_slug() . '/edit/group/2?redirected=wsk_checkout')) exit; //redirect user to profile edit page with a GET parameter
}
}
});
如果用戶在沒有完成個人資料的情況下嘗試結帳,他們將被重定向到帶有 GET 引數的個人資料編輯頁面。在此頁面上,如果他們完成了他們的組態檔并保存更改,則會觸發“profile_update”操作,并且組態檔編輯頁面會重新加載HTTP_REFERER包含先前設定的 GET 引數的引數:
add_action('profile_update',function(){
$user = wp_get_current_user();
if (WC()->cart->get_cart_contents_count() && !bpprocn_has_incomplete_profile($user->id) && str_contains($_SERVER['HTTP_REFERER'],'wsk_checkout')) {
wp_redirect('/checkout');
exit;
}
});
上面的代碼檢查用戶的購物車是否不為空并且他的個人資料是否完整并且 GET 引數存在于 中HTTP_REFERER,如果是,則將他們重定向回結帳頁面。
這樣,用戶只是試圖更新他們的個人資料并且碰巧在購物車中有東西不會被重定向到結帳頁面,因為他們沒有 GET 引數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/457910.html
上一篇:從管理面板遠程銷毀用戶會話
