为WordPress添加登录日志
文 / @UTHEME
如果你的WordPress开放注册,很有可能需要一个登录日志记录,方便随时查看会员登录情况,这里简单的说一下实现原理。
首先需要创建一个数据库表用来存放登录日志信息,字段分别是:
- 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()函数验证登录信息是否正确,然后将结果写入日志。
当然,你可能还需要一个页面来输出登录日志列表,更好的办法是写一个插件来实现所有需求。

相关文章
-
WordPress插件:All in One WP Security & Firewall 怎么样(附:AIOWPS拦截垃圾评论设置教程) 2023-01-26 21:51:51
-
在 PHP 中如何通过一行代码就交换两个变量的值 2023-01-26 00:18:31
-
WordPress主题:Pin Premium (WordPress仿Pinterest样式瀑布流主题) 2023-01-25 23:36:43
-
免费WordPress主题:Maupassant(WordPress中文博客主题) 2023-01-25 23:31:29
-
WordPress响应式图片(Responsive Image)功能关闭:取消WordPress图片宽带和高度参数 2023-01-24 10:49:32
-
wordpress报错:修复MySQL 1064错误问题 错误原因和解决方法 2023-01-24 10:42:04
-
WordPress 实现静态化搜索结果页面的方法 2023-01-24 00:41:44
-
WP Rocket – 强大的WordPress缓存加速优化插件(附:WP Rocket插件设置过程与七折优惠码) 2023-01-24 00:41:44
-
get_permalink、get_the_permalink和the_permalink有啥区别? 2023-01-24 00:41:08
-
为什么选用WordPress搭建独立站? 2023-01-23 20:25:21