如何显示具有字母标题的用户列表?例如:
A<亚当·艾伦
B<比尔,鲍勃
我已经找到了一些可以在帖子中使用的示例,但我不知道如何使用它WP_User_query()
:(
如何显示具有字母标题的用户列表?例如:
A<亚当·艾伦
B<比尔,鲍勃
我已经找到了一些可以在帖子中使用的示例,但我不知道如何使用它WP_User_query()
:(
经过一番努力,我终于想出了一些办法。这当然不是最好的方法,但由于没有一种好的方法可以直接通过核心进行操作,而不必进行大量的数组重新排序,因此我认为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不是(显然,因为它是伪代码)。@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;
Im使用get\\u users函数显示站点上的自定义用户列表。我现在唯一有问题的是如何对结果分页。这是Im使用的函数示例:似乎没有一种明显的方法可以为this函数创建分页。如果能帮上点忙,我将不胜感激。