用户管理区中的 Wordpress 验证 Billing_Phone
Wordpress Validate Billing_Phone in User Admin Area
我目前有 wordpress/woocommerce 和一个 billing_phone 验证函数(在下面提供),它在我的帐户 -> 帐户详细信息、结帐等中工作。此函数首先检查值是否为有效的 phone 号码,然后检查该 phone 号码是否已经存在。这是我的插件中一个非常重要的功能,因为我不能重复。
我需要与后端中的前端相同的 checks/balances...我遇到问题的地方是找到最合适的钩子或一组钩子以允许我验证 billing_phone 管理区域内的字段和 1) 使用您通常会在管理后台看到的错误消息显示错误,以及 2) 不更新字段并显示错误。
我试过 user_profile_update_errors
- 唉,它只在更新元数据后才提供错误,我找不到任何关于如何在 $error
变量中包含检查的信息。我也尝试了 edit_user_profile_update
和 show_user_profile
但我不知道如何向下面的函数添加错误。
function user_admin_validate_billing_phone() {
if ( isset( $_POST['billing_phone'] ) && !empty( $_POST['billing_phone'] ) ) {
if ( !preg_match('/^04[0-9]{8}$/D', str_replace(' ', '', $_POST['billing_phone'] ) ) ) {
// Error: Billing Phone Number is Invalid.
}
$existing_billing_phone = get_users( 'meta_value=' . str_replace(' ', '', $_POST['billing_phone'] ) );
$current_user = wp_get_current_user();
if ( !empty( $existing_billing_phone ) ) {
if ( $current_user->billing_phone != str_replace(' ', '', $_POST['billing_phone'] ) ) {
// Error: Billing Phone Number Already Exists.
}
else {
return;
}
}
}
}
如上所述,我尝试了以下挂钩:
add_action( 'show_user_profile', 'user_admin_validate_billing_phone', 90 );
add_action( 'edit_user_profile', 'user_admin_validate_billing_phone', 90 );
add_action( 'personal_options_update', 'user_admin_validate_billing_phone' );
add_action( 'edit_user_profile_update', 'user_admin_validate_billing_phone' );
add_action( 'user_profile_update_errors, 'user_admin_validate_billing_phone', 10, 3 );
...但是错误出现并且字段仍在更改,或者我不知道如何进行适当的错误处理,例如:
$error = new WP_Error();
$error->add( 'error', __( 'Billing Mobile Phone Number already exists.' ) );
如能提供正确流程的任何帮助或指导,我们将不胜感激。
使用此代码。
function user_admin_validate_billing_phone() {
if ( isset( $_POST['billing_phone'] ) && !empty( $_POST['billing_phone'] ) ) {
if ( !preg_match('/^04[0-9]{8}$/D', str_replace(' ', '', $_POST['billing_phone'] ) ) ) {
// Error: Billing Phone Number is Invalid.
wc_add_notice(__('Billing Phone Number is Invalid.', 'woocommerce'));
}
$existing_billing_phone = get_users( 'meta_value=' . str_replace(' ', '', $_POST['billing_phone'] ) );
$current_user = wp_get_current_user();
if ( !empty( $existing_billing_phone ) ) {
if ( $current_user->billing_phone != str_replace(' ', '', $_POST['billing_phone'] ) ) {
// Error: Billing Phone Number Already Exists.
wc_add_notice(__('Billing Phone Number Already Exists.', 'woocommerce'));
}
else {
return;
}
}
}
}
希望对您有所帮助。
一个例子
function validate_phone_field(&$errors, $update = null, &$user = null) {
if ( empty($_POST['billing_phone']) ) {
$errors->add('empty_phone', '<strong>ERROR</strong>: Please Enter a phone number');
}
}
add_action( 'user_profile_update_errors', 'validate_phone_field' );
add_action('woocommerce_checkout_process', 'wh_phoneValidateCheckoutFields');
function wh_phoneValidateCheckoutFields() {
$billing_phone = filter_input(INPUT_POST, 'billing_phone');
if (strlen(trim(preg_replace('/^[6789]\d{9}$/', '', $billing_phone))) > 0) {
wc_add_notice(__('Invalid <strong>Phone Number</strong>, please check your input.'), 'error');
}
}
代码进入您的活动子主题(或主题)的 functions.php 文件。或者在任何插件 PHP 文件中。
请注意:默认情况下,WooCommerce 使用 billing_phone 字段来获取 phone 数字,但如果您自定义了它,则可以将 billing_phone 替换为您的字段名称。
希望对您有所帮助!
我目前有 wordpress/woocommerce 和一个 billing_phone 验证函数(在下面提供),它在我的帐户 -> 帐户详细信息、结帐等中工作。此函数首先检查值是否为有效的 phone 号码,然后检查该 phone 号码是否已经存在。这是我的插件中一个非常重要的功能,因为我不能重复。
我需要与后端中的前端相同的 checks/balances...我遇到问题的地方是找到最合适的钩子或一组钩子以允许我验证 billing_phone 管理区域内的字段和 1) 使用您通常会在管理后台看到的错误消息显示错误,以及 2) 不更新字段并显示错误。
我试过 user_profile_update_errors
- 唉,它只在更新元数据后才提供错误,我找不到任何关于如何在 $error
变量中包含检查的信息。我也尝试了 edit_user_profile_update
和 show_user_profile
但我不知道如何向下面的函数添加错误。
function user_admin_validate_billing_phone() {
if ( isset( $_POST['billing_phone'] ) && !empty( $_POST['billing_phone'] ) ) {
if ( !preg_match('/^04[0-9]{8}$/D', str_replace(' ', '', $_POST['billing_phone'] ) ) ) {
// Error: Billing Phone Number is Invalid.
}
$existing_billing_phone = get_users( 'meta_value=' . str_replace(' ', '', $_POST['billing_phone'] ) );
$current_user = wp_get_current_user();
if ( !empty( $existing_billing_phone ) ) {
if ( $current_user->billing_phone != str_replace(' ', '', $_POST['billing_phone'] ) ) {
// Error: Billing Phone Number Already Exists.
}
else {
return;
}
}
}
}
如上所述,我尝试了以下挂钩:
add_action( 'show_user_profile', 'user_admin_validate_billing_phone', 90 );
add_action( 'edit_user_profile', 'user_admin_validate_billing_phone', 90 );
add_action( 'personal_options_update', 'user_admin_validate_billing_phone' );
add_action( 'edit_user_profile_update', 'user_admin_validate_billing_phone' );
add_action( 'user_profile_update_errors, 'user_admin_validate_billing_phone', 10, 3 );
...但是错误出现并且字段仍在更改,或者我不知道如何进行适当的错误处理,例如:
$error = new WP_Error();
$error->add( 'error', __( 'Billing Mobile Phone Number already exists.' ) );
如能提供正确流程的任何帮助或指导,我们将不胜感激。
使用此代码。
function user_admin_validate_billing_phone() {
if ( isset( $_POST['billing_phone'] ) && !empty( $_POST['billing_phone'] ) ) {
if ( !preg_match('/^04[0-9]{8}$/D', str_replace(' ', '', $_POST['billing_phone'] ) ) ) {
// Error: Billing Phone Number is Invalid.
wc_add_notice(__('Billing Phone Number is Invalid.', 'woocommerce'));
}
$existing_billing_phone = get_users( 'meta_value=' . str_replace(' ', '', $_POST['billing_phone'] ) );
$current_user = wp_get_current_user();
if ( !empty( $existing_billing_phone ) ) {
if ( $current_user->billing_phone != str_replace(' ', '', $_POST['billing_phone'] ) ) {
// Error: Billing Phone Number Already Exists.
wc_add_notice(__('Billing Phone Number Already Exists.', 'woocommerce'));
}
else {
return;
}
}
}
}
希望对您有所帮助。
一个例子
function validate_phone_field(&$errors, $update = null, &$user = null) {
if ( empty($_POST['billing_phone']) ) {
$errors->add('empty_phone', '<strong>ERROR</strong>: Please Enter a phone number');
}
}
add_action( 'user_profile_update_errors', 'validate_phone_field' );
add_action('woocommerce_checkout_process', 'wh_phoneValidateCheckoutFields');
function wh_phoneValidateCheckoutFields() {
$billing_phone = filter_input(INPUT_POST, 'billing_phone');
if (strlen(trim(preg_replace('/^[6789]\d{9}$/', '', $billing_phone))) > 0) {
wc_add_notice(__('Invalid <strong>Phone Number</strong>, please check your input.'), 'error');
}
}
代码进入您的活动子主题(或主题)的 functions.php 文件。或者在任何插件 PHP 文件中。
请注意:默认情况下,WooCommerce 使用 billing_phone 字段来获取 phone 数字,但如果您自定义了它,则可以将 billing_phone 替换为您的字段名称。
希望对您有所帮助!