web-dev-qa-db-ja.com

wp_update_userは更新されず、update_user_metaは更新されません

ユーザーがフロントエンドで自分のプロフィールを更新できるユーザープロフィールページを作成しています。ユーザープロファイルは、 'Twitter'、 'Facebook'、 'C​​ity'などのいくつかのカスタムフィールドで拡張されています。

次のコードは、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がすべてのレコードを更新しないのでしょうか。私は何か悪いことをしていますか?

よろしくお願いします。

4
Tomas

wp_update_user&metadata

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テーブルに保存されます。

デフォルトでは、これらはJabberaimyimです。

しかしながら、これらは'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.php1426行以降(3.5.1以降) を参照してください。

8
Johannes Pille