繁体   English   中英

Wordpress列表来自wp_users和wp_usermeta

[英]Wordpress list results from wp_users and wp_usermeta

我正在编写一个插件,它使用wordpress数据库从wordpress数据库中获取数据...

$data = $wpdb->get_results("SELECT * FROM $wpdb->users", ARRAY_A);      

这工作正常,我可以显示users表中的所有信息,我的问题是我还需要提取wp_usermeta表中的名字和姓氏。

有没有办法修改语句以从其他表中提取这些细节?

不是在一个查询中,也不一定是最简单的,但以下将产生你想要的:

$data = $wpdb->get_results("SELECT * FROM $wpdb->users", ARRAY_A);  
$i = 0;
foreach($data as $single) {
    $meta = $wpdb->get_results(
        "SELECT meta_value
        FROM $wpdb->usermeta
        WHERE user_id = $single[ID]
        AND (meta_key = 'first_name' OR meta_key = 'last_name')
        ORDER BY meta_key",
        ARRAY_A
    );
    $data[$i]['first_name'] = $meta[0]['meta_value'];
    $data[$i]['last_name'] = $meta[1]['meta_value'];
    $i++;
}

编辑:这是一个查询:

$data = $wpdb->get_results(
    "SELECT $wpdb->users.*,
        GROUP_CONCAT(
            $wpdb->usermeta.meta_value
            ORDER BY $wpdb->usermeta.meta_key
            SEPARATOR ' '
        ) AS name
    FROM $wpdb->users
    LEFT JOIN $wpdb->usermeta
    ON $wpdb->users.ID = $wpdb->usermeta.user_id
    WHERE ($wpdb->usermeta.meta_key = 'first_name'
        OR $wpdb->usermeta.meta_key = 'last_name')
    GROUP BY $wpdb->users.ID",
    ARRAY_A
);

请注意,与第一个版本相反,后者不会生成$data[x]['first_name']$data[x]['last_name'] ,而是生成$data[x]['name'] 这是因为要么存储在“meta_value”列中。 无法在一个查询中完成您的任务,并同时将名字和姓氏存储在两个不同的数组键中。

因此,如果以第二种方式进行,您必须稍后使用php的explode()函数来访问该名称。 或者在运行查询后在循环中更正它:

$i = 0;
foreach($data as $single) {
    $name_parts = explode(' ', $single['name']);
    $data[$i]['first_name'] = $name_parts[0];
    $data[$i]['last_name'] = $name_parts[1];
    $i++;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM