建站教程

建站教程

Products

当前位置:首页 > 建站教程 >

WordPress 如何根据上次发表文章的时间对作者用户列表进行排序

GG网络技术分享 2025-03-18 16:15 0


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){

}

}

}

排序有个问题就是当用户和文章越来越多的时候,数据查询的时间会越来越长,也就是可能会卡住。

标签: WordPress op

提交需求或反馈

Demand feedback