我们编写并维护的WP插件存在问题-Export User Data
用户报告了一个问题,即未正确返回非唯一用户元数据记录-here
在该插件中,我们使用get\\u users()导出用户选择的用户元数据,而get\\u users()反过来使用WP\\u user\\u查询:
我们传递几个简单的参数来获取\\u用户:
// build argument array ##
$args = array(
\'fields\' => \'all\',
\'role\' => sanitize_text_field( $_POST[\'role\'] )
);
如果我们检查返回的WP\\U用户对象,则不会返回usermeta字段-例如(对象数据减少以节省空间):
Array
(
[0] => WP_User Object
(
[data] => stdClass Object
(
[ID] => 1267
[user_login] => [email protected]
...
)
[ID] => 1267
...
)
[1]...
我们已尝试将“fields”参数的get\\u users参数从“all”更改为“all\\u with\\u meta”,但这似乎并没有更改最初返回的数据。
在导出这些用户元数据行时,我们首先循环该WP\\u用户对象数组,然后回显单个usermeta字段数据(字段来自在$users循环外循环的$字段数组):
// build row values for each user ##
foreach ( $users as $user ) {
// grab value from $user object ##
$value = $user->{$field};
}
现场数据正在
magically 添加到$user对象中,尽管这没有显示在最初返回的对象数据中,但我们无法控制它是否为每个usermeta字段返回单个值或值数组。
由于数据是自动返回的,因此我们不控制所选的方法,如果使用get_user_meta 直接(但我们仍然存在一个问题,即不知道存储的数据是否唯一,而不运行额外的查询,这对于大型导出来说代价高昂)。
我写这篇文章是为了尝试向其他人解释这个问题,同时也帮助我们寻找答案并解决这个问题。
Update
我们已将测试修复推到
github 使用一种方法检查非唯一的usermeta键,并在存在多个匹配键的情况下返回一个数组