如果您有一个拥有大量用户的 WordPress 网站,您可能需要查询网站用户的活跃程度。那么WordPress 用户的最后登录时间可能会有所帮助。在本文中,我们将实现显示用户的上次登录时间,您将能够对其进行排序,以便查看谁有一段时间没有登录。

使用插件显示 WordPress 用户的最后登录时间

显示 WordPress 用户上次登录时间的最简单方法是使用 When Last Login 插件。

安装并激活插件后,您将在用户列表中看到一个 Last Login 列。

通过自定义代码显示 WordPress 用户的最后登录时间

使用插件的方式更加快捷,但是插件默认是英文版的,您也可以通过自定义代码来更好的定制化显示 WordPress 用户的最后登录时间,下面是一段示例代码,将这段代码添加到主题文件的 functions.php 文件中即可:

//Record user's last login to custom meta
add_action( 'wp_login', 'smart_capture_login_time', 10, 2 );

function smart_capture_login_time( $user_login, $user ) {
    update_user_meta( $user->ID, 'last_login', time() );
}

//Register new custom column with last login time
add_filter( 'manage_users_columns', 'smart_user_last_login_column' );
add_filter( 'manage_users_custom_column', 'smart_last_login_column', 10, 3 );

function smart_user_last_login_column( $columns ) {
    $columns['last_login'] = '最后登录时间';
    return $columns;
}

function smart_last_login_column( $output, $column_id, $user_id ){
    if( $column_id == 'last_login' ) {
        $last_login = get_user_meta( $user_id, 'last_login', true );
        $date_format = 'Y-m-d';
        $hover_date_format = 'Y-m-d H:i:s';
	$output = $last_login ? '<div title="最后登录时间: '.date( $hover_date_format, $last_login ).'">'.human_time_diff( $last_login ).'</div>' : '无';
	}
	return $output;
}

//Allow the last login columns to be sortable
add_filter( 'manage_users_sortable_columns', 'smart_sortable_last_login_column' );
add_action( 'pre_get_users', 'smart_sort_last_login_column' );

function smart_sortable_last_login_column( $columns ) {
	return wp_parse_args( array(
	 	'last_login' => 'last_login'
	), $columns );
}

function smart_sort_last_login_column( $query ) {
	if( !is_admin() ) {
		return $query;
	}
	$screen = get_current_screen();
	if( isset( $screen->base ) && $screen->base !== 'users' ) {
		return $query;
	}
	if( isset( $_GET[ 'orderby' ] ) && $_GET[ 'orderby' ] == 'last_login' ) {
		$query->query_vars['meta_key'] = 'last_login';
		$query->query_vars['orderby'] = 'meta_value';
	}
        return $query;
}

//Add [lastlogin] shortcode
function smart_lastlogin_shortcode( $atts ) {
  $atts = shortcode_atts(
  array(
      'user_id' => false,
  ), $atts, 'lastlogin' );

  $last_login = get_the_author_meta('last_login', $atts['user_id']);
  if( empty($last_login) ){ return false; };
  $the_login_date = human_time_diff($last_login);
  return $the_login_date; 
}

add_shortcode( 'lastlogin', 'smart_lastlogin_shortcode' );

代码效果如下:

如果想获取详细的登录时间,把鼠标移动到时间上即可。也可以修改上述代码中的 smart_last_login_column 函数来自定义时间显示方式。

这段代码还添加了在前端显示用户上次登录的功能。例如,在前端作者框中,您可以包含 [lastlogin] 短代码,以便用户查看作者上次在线的时间。