我正试图拿出大约5000多条会员记录的列表,用于CSV导出。查询超时,我想原因是为了填充CSV文件,我需要遍历这5000条记录,并分别为每个用户提取自定义元。
是否可以扩展或覆盖WP\\u User\\u查询或WP\\u User以在单个查询中返回所有自定义元?
基本上,我需要做的是摆脱对每个记录单独调用get\\u user\\u meta($user->ID),并在一个结果集中获取所有meta。
感谢您的帮助!:)
我正试图拿出大约5000多条会员记录的列表,用于CSV导出。查询超时,我想原因是为了填充CSV文件,我需要遍历这5000条记录,并分别为每个用户提取自定义元。
是否可以扩展或覆盖WP\\u User\\u查询或WP\\u User以在单个查询中返回所有自定义元?
基本上,我需要做的是摆脱对每个记录单独调用get\\u user\\u meta($user->ID),并在一个结果集中获取所有meta。
感谢您的帮助!:)
在这种情况下,最好(IHMO)使用$wpdb class
例如:
<?php
global $wpdb;
//first get a list of all meta keys
$keys = $wpdb->get_col("SELECT distinct meta_key FROM $wpdb->usermeta");
//then prepare the meta keys query as fields which we\'ll join to the user table fields
$meta_columns = \'\';
foreach ($keys as $key) {
$meta_columns .= " MAX(CASE WHEN um1.meta_key = \'$key\' THEN um1.meta_value ELSE NULL END) AS ".str_replace(\'-\',\'_\',$key).", \\n";
}
//then write the main query with all of the regular fields and use a simple left join on user users.ID and usermeta.user_id
$query = "
SELECT
u.ID,
u.user_login,
u.user_pass,
u.user_nicename,
u.user_email,
u.user_url,
u.user_registered,
u.user_activation_key,
u.user_status,
u.display_name,
".rtrim($meta_columns,", \\n") ."
FROM
$wpdb->users u
LEFT JOIN
$wpdb->usermeta um1 ON (um1.user_id = u.ID)
GROUP BY
u.ID";
$users = $wpdb->get_results($query,ARRAY_A);
var_dump($users);
请记住,这是一个您应该构建的示例,例如过滤不需要的用户和元键。是否有理由wp_dropdown_users() 哪个会添加一个空的空值(未选择用户)?