Как я могу показать список пользователей с алфавитными заголовками? Например:
Адам
Алан
В
Билл
боб
Я нашел примеры, которые делают это с помощью Posts, но я не могу понять, как заставить его работать с WP_User_query()
🙁
После хорошего возиться я что-то придумал. Это, конечно, не метод BEST, но так как нет никакого способа сделать это через ядро напрямую, не выполняя кучу переупорядочения массива, я думаю, что 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
Ничего особенного в этом нет, он просто получает все значения из таблицы пользователей, где есть первое имя.
Для этого списка вы можете просто перебирать эти результаты, это довольно просто сделать. Единственное, что вам нужно сделать, это заставить заголовки работать правильно. Если вы сохраните заголовок, тогда сравните регистр без учета регистра, это должно быть довольно легко. Например (псевдокод):
$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;