В настоящее время у меня есть WordPress / WooCommerce и функция оценки billing_phone (приведена ниже), которая работает в разделе Моя учетная запись -> Сведения об учетной записи, Оформление заказа и т. Д. c. Эта функция сначала проверяет, является ли значение действительным номером телефона, а затем проверяет, существует ли этот номер телефона уже. Это очень важная функция в моем плагине, так как я не могу позволить себе иметь дубликаты.
Мне требуются те же проверки / противовесы, что и во внешнем интерфейсе бэкэнда ... У меня возникают проблемы с поиском наиболее подходящего хука или группы хуков, чтобы я мог проверить поле 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.' ) );
Любая помощь или руководство для правильный процесс будет наиболее цениться.