P粉4640884372023-09-04 11:32:09
你嘗試過沒有這個嗎?
if( is_checkout() ) { return $errors; }
由於過濾器是一個註冊過濾器,所以似乎那段程式碼是不必要的,因為它不會在結帳時被呼叫。嘗試註解掉那個程式碼區塊,然後再次測試註冊。如果它能工作,那麼也要測試結帳流程,確保它沒有出錯。
return $errors;
會結束函數,錯誤不會被加入。當然,我會假設is_checkout()
會在註冊時返回false,但也許在註冊時它會因某種原因返回true?
總之,只是一個嘗試。
P粉2311124372023-09-04 10:04:20
我已經在測試網站上測試了你的程式碼,對我來說它運作正常,當複選框未被選中時會顯示錯誤提示...
現在在最後一個函數中有一些缺少的東西,你在add_filter()
部分宣告了3個參數,所以還缺少2個。同時我還簡化了你的程式碼
這裡只是最後一個函數的修改後程式碼:
// 验证 add_filter( 'woocommerce_registration_errors', 'privacy_checkbox_registration_validation', 999, 3 ); function privacy_checkbox_registration_validation( $errors, $username, $email ) { // 不在结账页面 if( ! is_checkout() && empty( $_POST[ 'privacy_policy' ] ) ) { $errors->add( 'privacy_policy_error', 'Вам нужно принять политику конфиденциальности.' ); } return $errors; }
現在我不確定這是否能解決你的問題,因為在你的網站上提交後頁面會重新加載,所以錯誤訊息沒有時間顯示。