Tenemos un problema con un complemento WP que escribimos y mantenemos - Exportar datos de usuario
Un usuario ha informado de un problema de que los registros de metadatos de usuario no únicos no se devuelven correctamente, aquí
En el complemento, exportamos los datos de usuario seleccionados por el usuario, usando get_users () que a su vez usa WP_User_Query:
Pasamos algunos argumentos simples a get_users:
// build argument array ##
$args = array(
'fields' => 'all',
'role' => sanitize_text_field( $_POST['role'] )
);
Si inspeccionamos un objeto WP_User devuelto, los campos usermeta no se devuelven, por ejemplo (datos del objeto reducidos para ahorrar espacio):
Array
(
[0] => WP_User Object
(
[data] => stdClass Object
(
[ID] => 1267
[user_login] => user@email.com
...
)
[ID] => 1267
...
)
[1]...
Hemos tratado de cambiar los argumentos de get_users para el parámetro "fields" de "all" a "all_with_meta", sin embargo, esto no parece cambiar los datos devueltos originalmente.
En el punto en el que exportamos estas filas de metadatos de usuario, primero hacemos un bucle sobre esa matriz de objetos WP_User y luego hacemos eco de los datos individuales del campo usermeta ($ field proviene de una matriz de $ fields que se repite fuera del bucle $ users):
// build row values for each user ##
foreach ( $users as $user ) {
// grab value from $user object ##
$value = $user->{$field};
}
Los datos del campo se están agregando mágicamente al objeto $ user, aunque esto no se muestra en los datos del objeto devuelto originalmente; sin embargo, no tenemos control sobre si devuelve un único o conjunto de valores para cada campo usermeta.
Como los datos se devuelven automáticamente, no estamos controlando el método seleccionado, lo que podríamos hacer si usáramos get_user_meta directamente (pero aún tendríamos el problema de no saber que los datos almacenados son únicos o no, sin ejecutar extra consultas, lo que sería costoso en grandes exportaciones).
Escribo todo esto para tratar de explicar el problema a otros, y también para ayudarnos a buscar respuestas y resolver este problema.
Actualizar
Hemos introducido una solución de prueba en github utilizando un método para verificar si hay claves de usuario no únicas y devolver una matriz en caso de que haya más de una clave coincidente