无作为
不仅仅是一种态度!
当前位置: 无作为 » 技术教程 » wordpress技术经验 » WordPress后台显示用户最后登录时间和次数(前台显示登录/注册时间)

WordPress后台显示用户最后登录时间和次数(前台显示登录/注册时间)

分享一串WordPress的功能代码,让你的WordPress支持前台或者后台显示用户最后的登录时间,让你清楚的知道用户何时登陆过,最后登录是什么时候。

有这么一个功能之后,我们就可以清楚的知道哪些用户是活跃用户,那些事死用户,可以清理或者是处理相关问题!

接下来就让无作为来分享一下:WordPress前台显示用户最后登录时间和WordPress后台显示用户最后登录时间的方法吧!

WordPress后台显示用户最后登录时间

实现这个功能一共有两个办法,一个是插件版,一个是代码版,如果代码版有bug大家可以使用插件版,不过还是少用插件,我们先分享一下代码版的方法吧。

将下面的代码添加到当前主题的 functions.php 即可:

/**
 * WordPress 后台用户列表添加上次登录时间
 * http://www.wuzuowei.net/8282.html
 */
// 创建一个新字段存储用户登录时间
function insert_last_login( $login ) {
	global $user_id;
	$user = get_userdatabylogin( $login );
	update_user_meta( $user->ID, 'last_login', current_time( 'mysql' ) );
}
add_action( 'wp_login', 'insert_last_login' );
 
// 添加一个新栏目“上次登录”
function add_last_login_column( $columns ) {
	$columns['last_login'] = '上次登录';
	return $columns;
}
add_filter( 'manage_users_columns', 'add_last_login_column' );
 
// 显示登录时间到新增栏目
function add_last_login_column_value( $value, $column_name, $user_id ) {
	$user = get_userdata( $user_id );
	if ( 'last_login' == $column_name && $user->last_login )
		$value = get_user_meta( $user->ID, 'last_login', ture );
	else $value = '从未登录';
	return $value;
}
add_action( 'manage_users_custom_column', 'add_last_login_column_value', 10, 3 );

效果图如下:

WordPress后台显示用户最后登录时间和次数(前台显示登录/注册时间)

插件版:WP Last Login,大家直接点击即可下载。

WordPress前台显示用户最后登录时间

有时候我们在前台也需要显示,那么这里也提供代码给大家,让大家实现WordPress前台显示用户登录时间:

可以将下面的代码添加到当前主题functions.php中:

// 记录登录时间
function user_last_login($user_login) {
 global $user_ID;
 // 纠正8小时时差
 date_default_timezone_set(PRC);
 $user = get_user_by( 'login', $user_login );
 update_user_meta($user->ID, 'last_login', date('Y-m-d H:i:s'));
}
add_action('wp_login','user_last_login');
// 调用最后登录时间
function get_last_login($user_id) {
 $last_login = get_user_meta($user_id, 'last_login', true);
 $date_format = get_option('date_format') . ' ' . get_option('time_format');
 $the_last_login = mysql2date($date_format, $last_login, false);
 echo $the_last_login;
}

然后在主题适当位置调用即可,调用代码如下:

<?php global $userdata; get_currentuserinfo(); get_last_login($userdata->ID); ?>

到此我们打开首页就可以看到效果了。

WordPress前台显示用户注册时间

这里原理相同,也分享一段代码实现WordPress前台显示用户注册的时间功能,

将代码添加到当前主题functions.php中:

function user_registered_date(){
 $userinfo=get_userdata(get_current_user_id());
 $authorID= $userinfo->id;
 $user = get_userdata( $authorID );
 $registered = $user->user_registered;
 echo '注册时间' . date( 'Y年m月d日', strtotime( $registered ) );
}

然后是调用代码:

<?php if ( is_user_logged_in() ) { user_registered_date();} ?>

这段代码只有登录用户可见。

到此,代码就结束了,效果到底怎么样,大家自己调用之后打开网址首页就可以看见了哦。

WordPress 后台用户列表显示用户登录次数和时间

这里还有一份更加完善的代码集合,其功能是:WordPress 后台用户列表显示用户登录次数和时间,把上面的功能集合了,添加了一个登陆次数的显示!

将下面代码添加到function.php下即可:

/**
 * WordPress 后台用户列表显示用户登录次数和时间
 * http://www.wuzuowei.net/8282.html
 */
add_action('wp_login','freeman_your_last_login_time');
function freeman_your_last_login_time($login) {
	global $user_ID;
	$user = get_user_by('login', $login);
	$time_start = time();
	update_user_meta($user->ID, 'start_time', $time_start);
}
 
add_action('wp_logout', 'freeman_get_time_on_logout');
function freeman_get_time_on_logout($user_id) {
	global $user_ID;
	$user = get_user_by('id', $user_ID);
	$time_end = time();
	$time_start = get_user_meta($user->ID, 'start_time', true);
	$total_time = (intval($time_end) - intval($time_start));
	$total_time = round($total_time/60);
	$total_all_time = get_user_meta($user->ID, 'total_time', true);
	$total_time = $total_all_time + $total_time;
	update_user_meta($user->ID, 'total_time', $total_time);
 
 
	$logged_in_amount = get_user_meta($user->ID, 'logged_in_amount', true);
	$logged_in_amount = $logged_in_amount + 1;
	update_user_meta($user->ID, 'logged_in_amount', $logged_in_amount);
 
	$average_time = ($total_time/$logged_in_amount);
	update_user_meta($user->ID, 'average_time', $average_time);
}
 
add_filter('manage_users_columns', 'freeman_add_user_minutes_column');
function freeman_add_user_minutes_column($columns) {
	$columns['total_time'] = 'Total Minutes';
	$columns['logged_in_amount'] = '# of Logins';
	$columns['average_time'] = 'Ave. Min./Login';
	return $columns;
}
 
add_action('manage_users_custom_column',  'freeman_show_user_minutes_column_content', 10, 3);
function freeman_show_user_minutes_column_content($value, $column_name, $user_id) {
	$output = " ";
	$user = get_userdata( $user_id );
	if ( 'total_time' == $column_name )
		$output .= ($user->total_time);
	if ( 'logged_in_amount' == $column_name )
		$output .= ($user->logged_in_amount);
	if ( 'average_time' == $column_name )
		$output .= ($user->average_time);
	return $output;
}
 
add_action('admin_footer', 'freeman_custom_user_buttons');
function freeman_custom_user_buttons() {
	$screen = get_current_screen();
	if ( $screen->id != "users" )   // Only add to users.php page
	return;
	echo "
	<script type=\"text/javascript\">
		jQuery(document).ready(function($) {
			$('<option>').val('del_user_meta').text('Delete User Logs').appendTo(\"select[name='action']\");
			$('<option>').val('export_user_meta').text('Export User Logs').appendTo(\"select[name='action']\");
		});
	</script>
	";
}
 
add_action('load-users.php', 'freeman_delete_users_info');
function freeman_delete_users_info() {
	if(isset($_GET['action']) && $_GET['action'] === 'del_user_meta') {  // Check if our custom action was selected
		$del_users = $_GET['users'];  // Get array of user id's which were selected for meta deletion
		if ($del_users) {  // If any users were selected
			foreach ($del_users as $del_user) {
				delete_user_meta($del_user, 'logged_in_amount');
				delete_user_meta($del_user, 'total_time');
				delete_user_meta($del_user, 'average_time');
			}
		}
	}
}
 
add_action('load-users.php', 'freeman_export_users_info');
function freeman_export_users_info() {
	if(isset($_GET['action']) && $_GET['action'] === 'export_user_meta') {
		$del_users = $_GET['users'];
		if ($del_users) {
			$fp = fopen('file.csv', 'w');
			$User_Name_Row = array("USERNAME", "Total Minutes", "# of Logins", "Ave. Min./Login");
			fputcsv($fp, $User_Name_Row);
			foreach ($del_users as $del_user) {
				$user_info = get_userdata($del_user);
				$user_name = ($user_info->user_login);
				$logged_in_amount = get_user_meta($del_user, 'logged_in_amount', true);
				$total_time = get_user_meta($del_user, 'total_time', true);
				$average_time = get_user_meta($del_user, 'average_time', true);
 
				$list = array (
					array ($user_name, $total_time, $logged_in_amount, $average_time)
					);
 
				foreach ($list as $fields) {
					fputcsv($fp, $fields);
				}
			}
		}
 
		fclose($fp);
 
		$file="file.csv"; //file location
		header('Content-Type: application/octet-stream');
		header('Content-Disposition: attachment; filename="'.basename($file).'"');
		header('Content-Length: ' . filesize($file));
		readfile($file);
	}
}

测试发现这段代码导致了一些问题:登录次数是安装本文插件或添加代码后开始统计,登录时间莫名其妙是一个很大的数,也不知是从哪里的,暂时不深究了。

历史上的今天:

所有免费资源、福利、电影、破解软件未经允许不得转载:www.wuzuowei.net无作为 » WordPress后台显示用户最后登录时间和次数(前台显示登录/注册时间)
分享到: 更多 (0)

来句评论吧! 1

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #-19

    非常复杂,感谢楼主。

    essay代写3个月前 (09-28)回复

无作为-不仅仅是一种态度

登录/注册文章归档