ユーザーがフロントエンドで自分のプロフィールを更新できるユーザープロフィールページを作成しています。ユーザープロファイルは、 '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) ;
dCity
を更新するためにupdate_user_meta
を使用しようとしましたが、うまくいきました。
$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
がすべてのレコードを更新しないのでしょうか。私は何か悪いことをしていますか?
よろしくお願いします。
wp_update_user
* _usersテーブル内のレコードを更新します。 * _usermetaテーブル内のカスタムメタデータを更新するためのものではありません。
したがって、あなたの「問題」は実際には予想される動作です。
$userdata
に渡されるwp_update_user
引数には、以下のフィールドを含めることができます。
ID、user_pass、user_login、user_nicename、user_url、user_email、display_name、ニックネーム、first_name、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
に繰り返し、値が存在する場合は update_user_meta
を介して* _usermetaテーブルに追加されます。
参考として、/wp-includes/user.phpの 1426行以降(3.5.1以降) を参照してください。