垃圾站 WP教程 WordPress纯代码实现后台添加用户注册时间登录IP记录

WordPress纯代码实现后台添加用户注册时间登录IP记录

如果你的WordPress是开放注册的,很有可能你需要一个日志记录来随时查看会员的登录状态。下面简单介绍一下实现原理。WordPress自带的用户管理只能看到用户名、姓名、电子邮件、角色和文章。如果想看用户的注册时间,上次登录时间和登录IP地址等。,你看不到。首先,您需要创建一个数据库表来存储登录日志信息。

这些字段是:

  • ID:日志 ID;
  • user_login:用户登录账号,可能是用户名,也可能是邮箱;
  • log_time:登录时间;
  • ipaddress:用户 IP 地址;
  • message:消息,登录失败则记录错误信息;

WordPress 创建数据库表的代码可以参考:

global $pagenow;
if ( is_admin() && isset( $_GET['activated'] ) && $pagenow == 'themes.php' ) {
	global $wpdb;
	$table_name = $wpdb->prefix . 'logs';
	if( $wpdb->get_var("SHOW TABLES LIKE '$table_name'") != $table_name ) {
		$sql = 'CREATE TABLE IF NOT EXISTS ' . $table_name . ' (
			ID bigint(20) NOT NULL PRIMARY KEY AUTO_INCREMENT,
			user_login varchar(250) NOT NULL,
			log_time datetime NOT NULL,
			ipaddress text NOT NULL,
			message text
		) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;';
		require_once(ABSPATH . 'wp-admin/upgrade-functions.php');
		dbDelta($sql);
	}
}

将以上代码放到主题文件的 functions.php 中,当启用主题的时候会判断 wp_logs 表是否存在,不存在则创建。

写入登录日志的代码如下:

function bzg_login_logs($user_login, $user_password) {
	global $wpdb;
	$user = wp_authenticate($user_login, $user_password);
	$data = array(
		'user_name' => $user_login,
		'log_time' => date('Y-m-d H:i:s', current_time('timestamp') ),
		'ipaddress' => $_SERVER['REMOTE_ADDR'] == '::1' ? '127.0.0.1' : $_SERVER['REMOTE_ADDR'],
		'message' => '登录成功',
	);
	if ( is_wp_error($user) ) {
		$message = $user->get_error_message();
		$data['message'] = $message;
		$data['message'] = preg_replace('/<a[^>]*>.*<\/a>/i', '', $data['message']);
		$data['message'] = wp_strip_all_tags($data['message'], true);
	}
	$wpdb->insert('wp_logs', $data);
}
add_action('wp_authenticate', 'bzg_login_logs', 10, 2 );

这里用到了钩子 wp_authenticate,WordPress 登录是以 wp_signon()函数来完成的,在该函数中定义了钩子 wp_authenticate,我们通过 wp_authenticate()函数验证登录信息是否正确,然后将结果写入日志。

当然,你可能还需要一个页面来输出登录日志列表,更好的办法是写一个插件来实现所有需求。

上一篇
下一篇
联系我们

联系我们

返回顶部