在WordPress中想要用程式的方法來驗證WooCommerce的結帳欄位,這裡指的驗證方法是後端(PHP)驗證
1. 預設驗證規則
WooCommerce會先取得結帳欄位的參數(可透過woocommerce_checkout_fields這個filter修改),預設再幫你驗證一些規則:
- 必填,當required為true時
- 郵遞區號格式,當validate給入
postcode時 - 電話格式:當validate給入
phone時 - Email格式:當validate給入
email時 - 縣市(state)有效性:當validate給入
state時
參考WC_Checkout::validate_posted_data這個method
2. 自訂驗證規則
如果要自訂自己的驗證規則(如身分證字號,手機號碼等),可使用woocommerce_after_checkout_validation這個action hook
以下舉的例子為驗證台灣地區手機號碼的格式:
add_action('woocommerce_after_checkout_validation', 'octopuswp_validate_billing_mobile_number');
/**
* @param array $fields POST進來的結帳欄位資料
* @param WP_Error $errors
*/
function octopuswp_validate_billing_mobile_number($fields, $errors)
{
/**
* 假如手機號碼欄位key值為billing_mobile_number
* 要驗證台灣手機號碼,規則是09開頭的10碼數字
*/
if(!preg_match('/^09\d{8}$/', $fields['billing_mobile_number'])) {
// 這裡傳入的是一個WP_Error的物件參考,只要在驗證失敗時加入一個錯誤就行
// 第一個參數是自訂的錯誤代碼,第二個參數是錯誤訊息
$errors->add('mobile-number-error', '手機號碼格式錯誤,格式為0910123456');
}
}