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){ } } }
有种排序有个问题就是当用户以及文章越来越多时,数据查询的时间会越来越长,也就是可能会卡。
0 个评论