Woocommerce註冊中的自訂複選框驗證錯誤提示問題的重寫標題為:解決Woocommerce註冊時自訂複選框驗證錯誤提示的問題
P粉318928159
P粉318928159 2023-09-03 12:06:38
0
2
523
<p>在WooCommerce中,我使用以下程式碼向客戶註冊表單中新增自訂「隱私權」複選框:</p> <pre class="brush:php;toolbar:false;">// 新增複選框 add_action( 'woocommerce_register_form', 'add_privacy_checkbox_registration' ); function add_privacy_checkbox_registration() { $checkbox_text = sprintf( '%s <a href="%s"><strong>%s</strong></a>', __( 'Я прочитал и оогласнн esc_url( site_url('/politic-conf/') ), __( 'политикой конфиденциальности' ) ); ?> <div class="woocommerce-privacy-policy-wrapper"> <p class="form-row validate-required"> <label class="woocommerce-form__label woocommerce-form__label-for-checkbox checkbox"> <input type="checkbox" class="woocommerce-form__input woocommerce-form__input-checkbox input-checkbox" name="privacy_policy" <date; -policy" /> <span class="woocommerce-privacy-policy-checkbox-text"><?php echo $checkbox_text; ?></span> <abbr class="required</span> <abbr class="required</span> <abbr class="required" titled" ?php esc_attr_e( 'required', 'woocommerce' ); ?>">*</abbr> </label> <input type="hidden" name="policy-field" value="1" /> </p> </div> <?php } // 驗證 add_filter( 'woocommerce_registration_errors', 'privacy_checkbox_registration_validation', 10, 3 ); function privacy_checkbox_registration_validation( $errors ) { if( is_checkout() ) { return $errors; } if ( empty( $_POST[ 'privacy_policy' ] ) ) { $errors->add( 'privacy_policy_reg_error', 'Вам нужно принять политику конфиденциальности.' ); } return $errors; } </pre> <p>程式碼是有效的。複選框已新增。複選框邏輯也有效。 也就是說,如果您不勾選複選框,將無法進行使用者註冊。 </p> <p>但是有一個問題。如果未點選複選框,則錯誤文字不會顯示在螢幕上...</p> <p>這是我的網站上有問題的頁面 - 問題頁面</p> <p>有什麼想法嗎? </p>
P粉318928159
P粉318928159

全部回覆(2)
P粉464088437

你嘗試過沒有這個嗎?

if( is_checkout() ) {
    return $errors;
}

由於過濾器是一個註冊過濾器,所以似乎那段程式碼是不必要的,因為它不會在結帳時被呼叫。嘗試註解掉那個程式碼區塊,然後再次測試註冊。如果它能工作,那麼也要測試結帳流程,確保它沒有出錯。

return $errors;會結束函數,錯誤不會被加入。當然,我會假設is_checkout()會在註冊時返回false,但也許在註冊時它會因某種原因返回true?

總之,只是一個嘗試。

P粉231112437

我已經在測試網站上測試了你的程式碼,對我來說它運作正常,當複選框未被選中時會顯示錯誤提示...

現在在最後一個函數中有一些缺少的東西,你在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;
}

現在我不確定這是否能解決你的問題,因為在你的網站上提交後頁面會重新加載,所以錯誤訊息沒有時間顯示。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!