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){
- }
- }
- }
有种排序有个问题就是当用户以及文章越来越多时,数据查询的时间会越来越长,也就是可能会卡。
- 1、本站大部分内容均收集于网络,若内容侵犯到您的权益,请发送邮件至:service@wuyanshuo.cn,我们将第一时间处理!
- 2、本站资源所需价格并非资源售卖价格,是收集、整理、编辑以及本站运营的适当补贴,并且本站不提供任何免费技术服务。
- 3、所有资源仅限参考和学习,版权归原作者所有,更多请阅读无言说网络服务器协议。