Intereting Posts
wp_query должен сначала показывать листы Запросить пользователей для загрузки аватара при регистрации Как проверить роль пользователя? Получить первое сообщение от автора Постоянная ссылка для PDF статьи Получить сообщения по названию категории Как запрашивать пользовательские сообщения с использованием динамической категории Как попасть в определенную позицию в wp_query? Как заставить customizer WordPress автоматически загружать изменения? если родительская страница оператора для дочерних страниц Принудительный SSL-протокол для дочерних сайтов субдоменов с несколькими субсайтами + настройка cPanel Поверните галерею коротких штрихов в карусель в WordPress 4.4 Как вызвать WordPress PHP-файл с помощью внешнего js-файла Как получить идентификатор сообщения (родительского настраиваемого пользовательского типа) в цикле внутри виджета? Лучший способ показать описание и изображение. Подписи.

wp_update_user не обновляется, а update_user_meta

Я создаю страницу профиля пользователя, где пользователи могут обновлять свой профиль в интерфейсе. Профиль пользователя расширен с помощью нескольких настраиваемых полей, таких как «Twitter», «Facebook» и «City».

Следующий код успешно обновляет все данные пользователя, кроме dCity :

 $user_fields = array( 'ID' => $current_user->ID, 'nickname' => esc_attr($_POST['nickname']), 'first_name' => esc_attr($_POST['first_name']), 'last_name' => esc_attr($_POST['last_name']), 'display_name' => esc_attr($_POST['display_name']), 'user_email' => esc_attr($_POST['email']), 'user_url' => esc_attr($_POST['url']), 'twitter' => esc_attr($_POST['twitter']), 'facebook' => esc_attr($_POST['facebook']), 'description' => esc_attr($_POST['description']), 'dCity' => esc_attr($_POST['dCity']) ); wp_update_user($user_fields) ; 

Я попытался использовать update_user_meta для обновления dCity и это сработало:

 $user_fields = array( 'ID' => $current_user->ID, 'nickname' => esc_attr($_POST['nickname']), 'first_name' => esc_attr($_POST['first_name']), 'last_name' => esc_attr($_POST['last_name']), 'display_name' => esc_attr($_POST['display_name']), 'user_email' => esc_attr($_POST['email']), 'user_url' => esc_attr($_POST['url']), 'twitter' => esc_attr($_POST['twitter']), 'facebook' => esc_attr($_POST['facebook']), 'description' => esc_attr($_POST['description']) ); wp_update_user($user_fields); update_user_meta( $current_user->ID, 'dCity', $_POST['dCity'] ); 

Поэтому проблема решена, но мне интересно, почему wp_update_user не обновляет все записи? Я делаю что-то неправильно?

Заранее благодарю вас.

Solutions Collecting From Web of "wp_update_user не обновляется, а update_user_meta"

wp_update_user и метаданные

wp_update_user обновляет записи в таблице * _users . Он не предназначен для обновления пользовательских метаданных в таблице * _usermeta .

Следовательно, ваша «проблема» – это ожидаемое поведение.

Аргумент $userdata переданный в wp_update_user может содержать следующие поля:

ID, user_pass, user_login, user_nicename, user_url, user_email, имя_экземпляра, псевдоним, имя_пользователя, last_name, описание, rich_editing, user_registered, role, show_admin_bar_front

Далее он принимает метаданные, которые распознаются как «метод контакта». Это сохранит таблицу * _usermeta .

По умолчанию это jabber , aim & yim .

Однако они могут быть изменены / добавлены с помощью фильтра 'user_contactmethods' . Что касается вопроса, поднятого в комментариях, то, вероятно, как метаданные twitter и facebook были созданы с возможностью сохранения через wp_update_user .

Любые дополнительные метаданные должны быть сохранены как таковые с соответствующими функциями.

Как это происходит в ядре?

Это как в сторону:

wp_update_user вызывает _get_additional_user_keys который в свою очередь вызывает _wp_get_user_contactmethods . Полученные метатеки повторяются обратно в wp_update_user и если значение существует, добавляется в таблицу * _usermeta через update_user_meta .

Для справки см. Строку 1426 и после ( начиная с 3.5.1) /wp-includes/user.php