Я установил на одном из моих сайтов один и тот же код в двух (2) функциях - одна для woocommerce -> моя учетная запись и одна на кассе, которая проверяет действительность номера телефона, указанного c для моей страны и другой, чтобы проверить, существует ли уже номер телефона.
add_action( 'woocommerce_save_account_details_errors', 'wc_myaccount_validate_billing_phone', 20, 1); // My Account
function wc_myaccount_validate_billing_phone( $args ){
if ( isset ( $_POST['billing_phone'] ) && !empty ( $_POST['billing_phone'] ) ) {
if ( !preg_match( '/^04[0-9]{8}$/D', str_replace( ' ', '', $_POST['billing_phone'] ) ) ) {
wc_add_notice( __( '<strong>Billing Mobile Phone</strong> is invalid (Example: 0412 345 678).' ), 'error' );
}
$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'] ) ) {
wc_add_notice( __( '<strong>Billing Mobile Phone</strong> already exists.' ), 'error' );
}
else {
return;
}
}
}
}
add_action('woocommerce_checkout_process', 'wc_checkout_validate_billing_phone'); // Checkout
function wc_checkout_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'] ) ) ) {
wc_add_notice( __( '<strong>Billing Mobile Phone</strong> is invalid (Example: 0412 345 678).' ), 'error' );
}
$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'] ) ) {
wc_add_notice( __( '<strong>Billing Mobile Phone</strong> already exists.' ), 'error' );
}
else {
return;
}
}
}
}
Поскольку я хочу сохранить все номера телефонов как 0412345678 (без пробелов), а некоторые люди вводят номера телефонов как 0412 345 678, str_replace ( ) удаляет это перед сохранением.
add_action( 'woocommerce_checkout_update_user_meta', 'wc_checkout_save_billing_phone' );
function wc_checkout_save_billing_phone( $user_id ) {
if ( $user_id && $_POST['billing_phone'] ) {
update_user_meta( $user_id, 'billing_phone', str_replace(' ', '', $_POST['billing_phone'] ) );
}
}
Хотя я еще не тестировал следующую часть, и этот пример ссылается на эту ссылку , если вы хотите обновить пользователя с правами администратора область, в которой вы можете использовать что-то вроде этого.
add_action( 'show_user_profile', 'wc_checkout_validate_billing_phone', 10 );
add_action( 'edit_user_profile', 'wc_checkout_validate_billing_phone', 10 );
Ниже приведен скриншот результатов попытки изменить мой номер телефона на тот, который уже существует в разделе woocommerce-> my account.