WordPress 的 get_users 是获取用户列表的,我们可以获取所有角色是 author 的用户,但是这个排序却没有基于最新发布文章时间(get_users order by author last post date)来排序用户列表的。
我们可以通过以下函数来实现:
- function get_users_ordered_by_post_date($args = ”) {
- // Prepare arguments
- if (is_string($args) && ” !== $args)
- parse_str($args, $args);
- $asc = (isset($args[‘order’]) && ‘ASC’ === strtoupper($args[‘order’]));
- unset($args[‘orderby’]);
- unset($args[‘order’]);
- // Get ALL users
- $users = get_users($args);
- $post_dates = array();
- if ($users) {
- // For EACH user …
- foreach ($users as $user) {
- $ID = $user->ID;
- // … get ALL posts (per default sorted by post_date), …
- $posts = get_posts(‘author=’.$ID);
- $post_dates[$ID] = ”;
- // … then use only the first (= newest) post
- if ($posts) $post_dates[$ID] = $posts[0]->post_date;
- }
- }
- // Sort dates (according to order), …
- if (! $asc)
- arsort($post_dates);
- // … then set up user array
- $users = array();
- foreach ($post_dates as $key => $value) {
- // $user = get_userdata($key);
- // $users[] = $user->ID;
- $users[] = get_userdata($key);
- }
- return $users;
- }
将 get_users 替换为 get_users_ordered_by_post_date 即可,参数还是传入一个$args。
有一点需要注意的时,如果要分页获取作者列表,需对数组进行分页。
- $authors = get_users_ordered_by_post_date(
- array(
- ‘role__in’ => array( ‘author’ )
- )
- );
- if($authors){
- $perpage = 16;
- $pagess = ceil(count($authors) / $perpage);
- if (!get_query_var(‘paged’)) {
- $paged = 1;
- }else{
- $paged = $wpdb->escape(get_query_var(‘paged’));
- }
- $offset = $perpage*($paged–1);
- $authors2 = array_slice($authors,($paged–1)*$perpage,$perpage);
- if($authors2){
- foreach($authors2 as $author){
- }
- }
- }
有种排序有个问题就是当用户以及文章越来越多时,数据查询的时间会越来越长,也就是可能会卡。