Ловушка user_profile_update_errors
срабатывает перед возвратом ошибок обновления профиля пользователя. Вы можете создать отдельные функции для ваших ошибок / проверки для других ваших действий, и вы можете сохранить все свои настраиваемые поля (например: телефон, адрес и т.д. c) и проверить все свои настраиваемые поля (например: телефон, адрес и т.д. c) в каждой функции.
// validate profile field
add_action( 'user_profile_update_errors', array( $this, 'validate_profile_fields' ), 0, 3 );
// save profile fields to your own profile and others.
add_action( 'edit_user_profile_update', array( $this, 'save_profile_fields' ) );
add_action( 'personal_options_update', array( $this, 'save_profile_fields' ) );
function validate_profile_fields( &$errors, $update, &$user ) {
$phone_regex = "/08[789]\d{7}/u";
if ( !empty( $_POST['phone'] ) && strlen( $_POST['phone'] ) > 10) {
$errors->add( 'phone', "<strong>ERROR</strong>: The maximum phone length is 10 characters." );
}
if ( preg_match( $phone_regex, $_POST['phone'] ) == 0 ) {
$errors->add( 'phone', "<strong>ERROR</strong>: Not a valid phone number." );
}
return $errors;
}
function save_profile_fields( $id ) {
// save input fields values
$phone_regex = "/08[789]\d{7}/u";
if ( !current_user_can( 'edit_user', $id ) )
return false;
if ( isset( $_POST['phone'] )) {
if ( preg_match( $phone_regex, $_POST['phone'] ) == 1 ) {
update_user_meta( $id, 'phone', sanitize_text_field( $_POST['phone'] ) );
}
Насколько я понимаю, вам не нужно выполнять все те же проверки в функции сохранения, поскольку они были установлены в функции проверки / ошибок - поэтому, если все они передают функцию ошибок, срабатывает функция сохранения. что они не будут конфликтовать с другими функциями в других темах / плагинах. Вы можете использовать случайные символы или аббревиатуру вашего плагина, например: function abc1234_save_profile_fields()
или что угодно.
Если мой ответ удовлетворительный, отметьте его как свой.