按字母顺序列出用户和标题

时间:2012-03-07 作者:thv20

如何显示具有字母标题的用户列表?例如:

A<亚当·艾伦

B<比尔,鲍勃

我已经找到了一些可以在帖子中使用的示例,但我不知道如何使用它WP_User_query() :(

2 个回复
最合适的回答,由SO网友:mor7ifer 整理而成

经过一番努力,我终于想出了一些办法。这当然不是最好的方法,但由于没有一种好的方法可以直接通过核心进行操作,而不必进行大量的数组重新排序,因此我认为SQL是一个更好的解决方案。无论如何,SQL如下所示:

SELECT users.*, meta.meta_value
FROM $wpdb->users AS users LEFT JOIN $wpdb->usermeta AS meta
    ON users.ID = meta.user_id
WHERE meta.meta_key = \'first_name\'
    AND meta.meta_value != \'\'
ORDER BY meta.meta_value ASC
没有什么特别的,它只是从users表中获取所有的值,其中有一个名字集。

对于列表,您可以遍历这些结果,这非常简单。你需要做的唯一一件事就是让标题正确。如果存储标题,然后进行不区分大小写的比较,这应该很容易。例如(伪代码):

$cur_first_letter = substr( $first_name, 0, 1 );

if( strtoupper( $cur_first_letter ) != strtoupper( $prev_first_letter ) ) {
    // output header for strtoupper( $cur_first_letter )
}

$prev_first_letter = $cur_first_letter;
注意:SQL是经过测试的,PHP不是(显然,因为它是伪代码)。

SO网友:thv20

@m0r7if3r提供了正确答案。为了向关注此问题的其他人提供一个直接可用的代码片段,下面是我最终使用的代码片段。

$wp_users = $wpdb->get_results("
    SELECT users.*, meta.meta_value
    FROM $wpdb->users AS users LEFT JOIN $wpdb->usermeta AS meta
        ON users.ID = meta.user_id
    WHERE meta.meta_key = \'first_name\'
        AND meta.meta_value != \'\'
    ORDER BY meta.meta_value ASC
");

foreach ($wp_users as $wp_user) :

    $cur_first_letter = substr( $wp_user->meta_value, 0, 1 );

    if( strtoupper( $cur_first_letter ) != strtoupper( $prev_first_letter ) ) {
        echo "<h3 class=\'alpha-heading\'>$cur_first_letter</h3>";
    }

    echo "<li><a href=\'\'>$wp_user->meta_value</a></li>";

    $prev_first_letter = $cur_first_letter;

endforeach;

结束

相关推荐

如何对GET_USERS函数进行分页?

Im使用get\\u users函数显示站点上的自定义用户列表。我现在唯一有问题的是如何对结果分页。这是Im使用的函数示例:似乎没有一种明显的方法可以为this函数创建分页。如果能帮上点忙,我将不胜感激。