У нас есть проблема с плагином WP, который мы написали и поддерживаем - Экспорт данных пользователя
Пользователь сообщил о проблеме, что неуникальные записи метаданных пользователя не возвращаются правильно - здесь
В плагине мы экспортируем данные мета пользователя, выбранные пользователем, используя 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]...
Мы попытались изменить аргументы get_users для параметра «fields» со «all» на «all_with_meta», однако, похоже, это не меняет первоначально возвращенные данные.
В тот момент, когда мы экспортируем эти строки пользовательских метаданных, мы сначала зациклим этот массив объектов WP_User, а затем выведем на экран отдельные данные поля usermeta ($ field происходит из массива $ fields, который зацикливается вне цикла $ users):
// build row values for each user ##
foreach ( $users as $user ) {
// grab value from $user object ##
$value = $user->{$field};
}
Данные поля волшебным образом добавляются к объекту $ user, даже если это не показано в первоначально возвращенных данных объекта - однако мы не можем контролировать, возвращает ли оно одно или массив значений для каждого поля usermeta.
Так как данные возвращаются автоматически, мы не контролируем выбранный метод, что мы могли бы сделать, если бы использовали непосредственно get_user_meta (но у нас все еще была бы проблема не знать, являются ли сохраненные данные уникальными или нет, без выполнения дополнительных запросы - что будет дорого для большого экспорта).
Я пишу все это, чтобы попытаться объяснить другим проблему, а также помочь нам найти ответы и решить эту проблему.
Обновить
Мы отправили тестовое исправление на github, используя метод для проверки неуникальных ключей пользователя и возврата массива в случае, если имеется более одного совпадающего ключа