我有一个例子,如果我自己编写DB和查询,我只会执行以下操作SELECT name, firstname, email FROM users WHERE ...
. 返回给我一个列表/集合/数组,我的意思是,不一定是单个用户。
但我了解到,要在WordPress中获取name和firstname,首先需要获取一些用户的ID,然后使用类似的方法$targetUsers = get_users([\'include\' => wp_list_pluck($targetUsersIDs,\'ID\')]);
这意味着我得到了一个完整的用户对象集合,这可能是大量的数据。
目前,我想到的最好办法是运行以下查询:
SELECT u.ID, u.user_email, um.meta_key, um.meta_value FROM wp_users u JOIN wp_usermeta um ON u.ID = um.user_id
WHERE um.meta_key = \'last_name\' OR um.meta_key = \'first_name\'
GROUP BY u.ID, u.user_email, um.meta_key, um.meta_key
ORDER BY u.ID
然后循环构建我自己的对象。
或者可能与某些嵌套查询有关。。。
请注意,问题不是从用户表中选择特定字段,而是从用户元表中选择!
SO网友:leymannx
我想你应该坚持WP_User_Query
. 在那里,您可以简单地指定要用于选择特定用户的字段。还有元字段。
WP_User_Query
是一个类,在中定义wp-includes/user.php
, 允许查询WordPress数据库表wp_users
和wp_usermeta
.
但是是的(!),这不会返回用户元值。即使在设置时\'fields\' => \'all_with_meta\'
.
all_with_meta
当前返回的字段与all
其中不包括存储在中的用户字段wp_usermeta
. 您必须创建第二个查询以按ID获取用户元字段,或者使用__get
PHP magic方法来获取这些字段的值。
也就是说,我的结论是meta_query
在a中WP_User_Query
通过某些元数据选择用户,并使用该结果通过调用来检索其他元数据,例如get_user_meta($user->ID, \'meta_key\', TRUE)
.
$user_query = new WP_User_Query([
\'role\' => \'editor\',
\'meta_query\' => [
[
\'key\' => \'meta_key\',
\'compare\' => \'EXISTS\', // Use \'NOT EXISTS\' for non-existance of this key.
],
],
]);
$editors = $user_query->get_results();
foreach ($editors as $editor) {
$first_name = $editor->display_name;
$meta_value = get_user_meta($editor->ID, \'meta_key\', TRUE);
// ...
}
在我看来,这比自定义数据库查询的可读性和可维护性高出一百倍。
关于性能,请查看同一主题的相关答案,仅用于发布元数据:Can WP_Query
return post meta in a single request? 将您链接到:Custom post meta field effect on the performance on the post.