私たちが作成して管理しているWPプラグインに問題があります- ユーザーデータのエクスポート
ユーザーから、一意でないユーザーメタデータレコードが正しく返されないという問題が報告されました- ここ
プラグインでは、ユーザーが選択したusermetaデータをエクスポートします。get_users()を使用して、WP_User_Queryを使用します。
get_usersにいくつかの簡単な引数を渡します。
// build argument array ##
$args = array(
'fields' => 'all',
'role' => sanitize_text_field( $_POST['role'] )
);
返されたWP_Userオブジェクトを検査すると、usermetaフィールドは返されません-たとえば(オブジェクトデータはスペースを節約するために削減されます):
Array
(
[0] => WP_User Object
(
[data] => stdClass Object
(
[ID] => 1267
[user_login] => user@email.com
...
)
[ID] => 1267
...
)
[1]...
「fields」パラメーターのget_users引数を「all」から「all_with_meta」に変更しようとしましたが、これは最初に返されたデータを変更していないようです。
これらのユーザーメタデータ行をエクスポートする時点で、まずWP_Userオブジェクトの配列をループし、次に個々のユーザーメタフィールドデータをエコーします($ fieldは、$ usersループの外側でループする$ fieldsの配列から取得されます)。
// build row values for each user ##
foreach ( $users as $user ) {
// grab value from $user object ##
$value = $user->{$field};
}
最初に返されたオブジェクトデータには表示されていませんが、フィールドデータは$ userオブジェクトに魔法のように追加されています。ただし、usermetaフィールドごとに単一の値または配列の値を返すかどうかは制御できません。
データは自動的に返されるため、選択したメソッドを制御していません。get_user_metaを直接使用した場合は制御できます(ただし、保存されているデータが一意であるかどうかを知らないため、余分に実行する必要はありません)クエリ-大規模なエクスポートではコストがかかります)。
私はこれを書いて、問題を他の人に試して説明すると同時に、回答を探してこの問題を解決するのに役立てています。
更新
一意ではないusermetaキーをチェックし、一致するキーが複数ある場合は配列を返すメソッドを使用して、テストフィックスをgithubにプッシュしました