Temos um problema com um plug-in WP que escrevemos e mantemos - Exportar dados do usuário
Um usuário relatou um problema em que os registros de metadados do usuário não exclusivos não estão sendo retornados corretamente - aqui
No plug-in, exportamos os metadados do usuário selecionados pelo usuário - usando get_users () que, por sua vez, usa WP_User_Query:
Passamos alguns argumentos simples para get_users:
// build argument array ##
$args = array(
'fields' => 'all',
'role' => sanitize_text_field( $_POST['role'] )
);
Se inspecionarmos um objeto WP_User retornado, os campos usermeta não serão retornados - por exemplo (dados do objeto reduzidos para economizar espaço):
Array
(
[0] => WP_User Object
(
[data] => stdClass Object
(
[ID] => 1267
[user_login] => user@email.com
...
)
[ID] => 1267
...
)
[1]...
Tentamos alterar os argumentos get_users do parâmetro "fields" de "all" para "all_with_meta", no entanto, isso não parece alterar os dados retornados originalmente.
No momento em que exportamos essas linhas de metadados do usuário, primeiro fazemos um loop sobre essa matriz de objetos WP_User e, em seguida, ecoamos os dados individuais do campo de usermeta (o campo $ vem de uma matriz de campos $ que faz um loop fora do loop $ users):
// build row values for each user ##
foreach ( $users as $user ) {
// grab value from $user object ##
$value = $user->{$field};
}
Os dados do campo estão sendo adicionados magicamente ao objeto $ user, mesmo que isso não seja mostrado nos dados do objeto retornados originalmente - no entanto, não temos controle sobre se ele retorna um único ou conjunto de valores para cada campo de usermeta.
Como os dados estão sendo retornados automaticamente, não estamos controlando o método selecionado, o que poderíamos usar se get_user_meta diretamente (mas ainda teríamos o problema de não saber que os dados armazenados são únicos ou não, sem executar extra consultas - que custariam grandes exportações).
Estou escrevendo tudo isso para tentar explicar aos outros o problema, além de nos ajudar a procurar respostas e resolver esse problema.
Atualizar
Enviamos uma correção de teste para o github usando um método para verificar se há chaves não exclusivas do usuário e retornar uma matriz no caso de haver mais de uma chave correspondente