经过一番努力,我终于想出了一些办法。这当然不是最好的方法,但由于没有一种好的方法可以直接通过核心进行操作,而不必进行大量的数组重新排序,因此我认为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不是(显然,因为它是伪代码)。