如何回显具有特定元键的所有用户的显示名称和元值?

时间:2022-01-20 作者:Ben Blue

我有一个meta_key 在桌子里面usermeta 呼叫“sms\\U订户”。这个meta_value 因为这是他们的电话号码。我想echo 具有该字段的所有用户的列表;换句话说,是每个用户的姓名、电话号码和数量的列表。

页面输出可能如下所示:

SMS Subscribers (3)
1 ben blue+15553335555
2 bob bananas+44555778888
3 jerry johnson+1333445555

我尝试了许多不同的查询,并成功地echo 用户的display_name, 以及meta_value 具有meta_key 等于sms_subscriber, 但不在同一查询中。我在Sequel Pro中还有一个查询,它输出sum.

以下是:

显示用户显示名称的正确列表:

$user_query = new WP_User_Query( array( \'meta_key\' => \'sms_subscriber\' ) );
$users = $user_query->get_results();
if (!empty($users)) {
    echo \'<ul>\';
    foreach ($users as $user){
        echo \' <li>\' . $user->display_name . $user->meta_value . \'</li>\';
    } 
    echo \'</ul>\';
}
显示正确的电话号码列表:

$phones = $wpdb->get_col("SELECT meta_value FROM $wpdb->usermeta WHERE meta_key = \'sms_subscriber\'" );
$phones = array_keys(array_flip($phones));
// var_dump( $phones );
foreach ($phones as $phone) {
    echo $phone . \'<br>\';
}
在Sequel Pro的查询窗口中,显示sum:

select sum(um.meta_key = \'sms_subscriber\'), 
from wp_usermeta um
join wp_users u on u.id = um.user_id
where um.meta_key = \'sms_subscriber\'
你能帮我把这三个查询作为一个查询,这样我就可以创建列表了吗?

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

我想echo 具有该字段的所有用户的列表;换句话说,是每个用户的姓名、电话号码和数量的列表。

请尝试以下内容,它基于您的第一段代码:

(这就是你所需要的;不需要$wpdb->get_col() 代码段)

$user_query = new WP_User_Query( array( \'meta_key\' => \'sms_subscriber\' ) );
$users = $user_query->get_results();
if (!empty($users)) {
    echo \'<h3>SMS Subscribers (\' . $user_query->get_total() . \')</h3>\';

    echo \'<ul>\';
    foreach ($users as $user){
        // this one uses the magic __get() method in WP_User, i.e. $user-><meta key>
//      echo \' <li>\' . $user->display_name . " $user->sms_subscriber" . \'</li>\';

        $sms_subscriber = get_user_meta( $user->ID, \'sms_subscriber\', true );
        echo \' <li>\' . $user->display_name . " $sms_subscriber" . \'</li>\';
    }
    echo \'</ul>\';
}
<注意事项:您可以使用get_user_meta() 检索用户元数据的值。

或者,WP_User 有魔力__get() 方法,您可以使用该方法获取元值,而无需使用上述函数,但仅获取单个元值(无论该值是字符串/文本、数字、数组等)。例如,您可以使用$user->sms_subscriber 就像你在我上面注释掉的代码中看到的那样。

获取;“数量”;或sum 正如您所说的,这是与您的查询参数匹配的用户总数,您可以使用WP_User_Query::get_total().

如果您只想计算$users (即查询结果的第一页-可以使用number 参数),然后使用count( $users ) 代替$user_query->get_total().

相关推荐

AWS LightSail Wordpress-使用mysqli连接到实例上的数据库

我在AWS Lightsail上有一个wordpress网站。在那个网站上,我想使用一个短代码来使用mysqli从数据库中检索数据。但是,每次执行连接到数据库的脚本时,我都会收到一个连接错误。数据库位于同一AWS Lightsail实例上。我想知道是否需要建立SSH隧道,因为如果连接到phpmyadmin,也需要建立SSH隧道。但是,由于脚本是在服务器本身上执行的,因此在我的理解中,这并没有真正意义。我在本地主机上使用了完全相同的代码,它工作得非常好。我错过了什么?//Params to connect