Intereting Posts
MySQL: Как изменить URL-адрес в сообщениях с xxx.com на yyy.org? Настроить аватару с помощью пользователя meta какие эффективные способы отладки cron Как получить текущий идентификатор страницы через плагин Могу ли я использовать WP Multi-site в поддомене с другой темой, но использовать все записи / страницы исходного сайта? Как остановить форму поиска WordPress от поиска только на текущей странице? пользовательский COOKIE на пользовательской странице Храните липкие сообщения вне запроса, если они не имеют изображения wp_head () дает мне какой-то странный CSS add_query_vars и канонические ссылки Как добавить виджет подписки на MailChimp на страницу? (не виджет боковой панели) Как загрузить шаблон страницы из плагина? Первый плагин WordPress – проблемы с Stat Я хочу удалить ссылки из списка терминов, возвращаемого get_the_term_list Как импортировать только определенные комментарии из сообщения

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