我们编写并维护的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对象的数组,然后回显单个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,以检查非唯一的usermeta密钥,并在存在多个匹配密钥的情况下返回一个数组