當(dāng)前位置:首頁>WordPress建站>用戶交互>WordPress 后臺用戶列表顯示用戶登錄次數(shù)和時(shí)間

WordPress 后臺用戶列表顯示用戶登錄次數(shù)和時(shí)間

對于開放注冊的多用戶WordPress站點(diǎn),我們需要了解用戶的一些訪問情況,比如統(tǒng)計(jì) 用戶注冊時(shí)間最近一次登錄的時(shí)間 等,今天我們一起拓展一下,在 WordPress 后臺用戶列表 統(tǒng)計(jì)用戶的登錄次數(shù)、登錄總時(shí)間(分鐘)、平均每次登錄的時(shí)間,同時(shí)支持刪除和導(dǎo)出記錄。

log-user-stats-wpdaxue_com

如果你不喜歡折騰代碼,可以直接安裝 Log Users Stats 插件,如果你不喜歡插件,可以將下面的代碼(來自 Log Users Stats 插件)添加到主題的 functions.php 即可:

/**
 * WordPress 后臺用戶列表顯示用戶登錄次數(shù)和時(shí)間
 * http://www.ydqwiac.cn/log-user-stats.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);
	}
}

測試發(fā)現(xiàn):登錄次數(shù)是安裝本文插件或添加代碼后開始統(tǒng)計(jì),登錄時(shí)間莫名其妙是一個(gè)很大的數(shù),也不知是從哪里的,暫時(shí)不深究了。

聲明:本站所有文章,如無特殊說明或標(biāo)注,均為本站原創(chuàng)發(fā)布。任何個(gè)人或組織,在未征得本站同意時(shí),禁止復(fù)制、盜用、采集、發(fā)布本站內(nèi)容到任何網(wǎng)站、書籍等各類媒體平臺。如若本站內(nèi)容侵犯了原著者的合法權(quán)益,可聯(lián)系我們進(jìn)行處理。

給TA打賞
共{{data.count}}人
人已打賞
歡迎關(guān)注WordPress大學(xué)公眾號 WPDAXUE
用戶交互

WordPress 國內(nèi)社交網(wǎng)站登錄 Open Social Login for China

2013-11-27 9:20:35

用戶交互

WordPress 喜歡插件 ZillaLikes(已漢化)

2013-12-5 11:20:55

4 條回復(fù) A文章作者 M管理員
  1. 登錄時(shí)間莫名其妙是一個(gè)很大的數(shù)
    這個(gè)是unix時(shí)間戳吧.

  2. 我想給user表新增一個(gè)過期時(shí)間字段要怎么弄啊?

  3. 已添加,這樣就可以不用插件了!

  4. 學(xué)習(xí)一下

?
個(gè)人中心
購物車
優(yōu)惠劵
今日簽到
有新私信 私信列表
搜索

西吉县| 河源市| 凌云县| 广西| 德化县| 五华县| 津市市| 洛宁县| 南部县| 龙门县| 三亚市| 鹿邑县| 应城市| 济阳县| 忻州市| 重庆市| 伊春市| 贡山| 英超| 正宁县| 资阳市| 石首市| 若羌县| 峨眉山市| 万山特区| 祁东县| 彰化县| 上林县| 凌海市| 武鸣县| 蒲城县| 历史| 普安县| 宁夏| 托克托县| 屯留县| 内乡县| 宁安市| 青川县| 平陆县| 宁德市|