Wir haben ein Problem mit einem WP-Plugin, das wir geschrieben und verwaltet haben - Benutzerdaten exportieren
Ein Benutzer hat ein Problem gemeldet, bei dem nicht eindeutige Benutzer-Metadatensätze nicht korrekt zurückgegeben werden - hier
Im Plugin exportieren wir die vom Benutzer ausgewählten Usermeta-Daten - mit get_users (), das wiederum WP_User_Query verwendet:
Wir übergeben get_users einige einfache Argumente:
// build argument array ##
$args = array(
'fields' => 'all',
'role' => sanitize_text_field( $_POST['role'] )
);
Wenn wir ein zurückgegebenes WP_User-Objekt untersuchen, werden die Usermeta-Felder nicht zurückgegeben - zum Beispiel (Objektdaten werden aus Platzgründen reduziert):
Array
(
[0] => WP_User Object
(
[data] => stdClass Object
(
[ID] => 1267
[user_login] => user@email.com
...
)
[ID] => 1267
...
)
[1]...
Wir haben versucht, die Argumente für get_users für den Parameter "fields" von "all" in "all_with_meta" zu ändern. Dies scheint jedoch die ursprünglich zurückgegebenen Daten nicht zu ändern.
An dem Punkt, an dem wir diese Benutzermetadatenzeilen exportieren, durchlaufen wir zuerst das Array der WP_User-Objekte und geben dann die einzelnen Usermeta-Felddaten wieder ($ field stammt aus einem Array von $ -Feldern, die sich außerhalb der $ users-Schleife befinden):
// build row values for each user ##
foreach ( $users as $user ) {
// grab value from $user object ##
$value = $user->{$field};
}
Die Felddaten werden auf magische Weise zum $ user-Objekt hinzugefügt, obwohl dies in den ursprünglich zurückgegebenen Objektdaten nicht angezeigt wird. Wir haben jedoch keine Kontrolle darüber, ob für jedes Usermeta-Feld ein einzelnes oder ein Array von Werten zurückgegeben wird.
Da die Daten automatisch zurückgegeben werden, steuern wir nicht die ausgewählte Methode, die wir könnten, wenn wir get_user_meta direkt verwenden würden (aber wir hätten immer noch das Problem, nicht zu wissen, dass die gespeicherten Daten eindeutig sind oder nicht, ohne zusätzliche auszuführen Anfragen - was bei großen Exporten kostspielig wäre).
Ich schreibe dies alles auf, um zu versuchen, anderen das Problem zu erklären, und um uns dabei zu helfen, nach Antworten zu suchen und dieses Problem zu lösen.
Aktualisieren
Wir haben einen Testfix für Github mithilfe einer Methode gesendet, mit der nach nicht eindeutigen Usermeta-Schlüsseln gesucht und ein Array zurückgegeben wird, falls mehr als ein übereinstimmender Schlüssel vorhanden ist