wordpress添加用户注册以及登录IP记录

随着网站注册的开放很多相应的问题也随之而来,比如说需要限制注册人群,以及防止机器注册,我们可以添加一个验证问题来解决《wordpress新用户注册添加验证问题》,虽然添加了验证问答,但是有些蛋疼的人可能知道答案后会死命的注册,使用随机问答可以稍微缓解下这种情况,其实只要我们知道了用户注册时IP只需要对恶意注册的IP进行封锁即可解决这个问题,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
//透过代理或者cdn获取访客真实IP
function  get_client_ip() {
     if  ( getenv ( "HTTP_CLIENT_IP" ) &&  strcasecmp ( getenv ( "HTTP_CLIENT_IP" ),  "unknown" ))
         $ip  getenv ( "HTTP_CLIENT_IP" );
     else  if  ( getenv ( "HTTP_X_FORWARDED_FOR" ) &&  strcasecmp ( getenv ( "HTTP_X_FORWARDED_FOR" ), 
"unknown" ))
         $ip  getenv ( "HTTP_X_FORWARDED_FOR" );
     else  if  ( getenv ( "REMOTE_ADDR" ) &&  strcasecmp ( getenv ( "REMOTE_ADDR" ),  "unknown" ))
         $ip  getenv ( "REMOTE_ADDR" );
     else  if  (isset ( $_SERVER [ 'REMOTE_ADDR' ]) &&  $_SERVER [ 'REMOTE_ADDR'
&&  strcasecmp ( $_SERVER [ 'REMOTE_ADDR' ],  "unknown" ))
         $ip  $_SERVER [ 'REMOTE_ADDR' ];
     else
         $ip  "unknown" ;
     return  ( $ip );
}
// 添加一个字段保存IP地址
function  log_ip( $user_id ){
     $ip  = get_client_ip();
     update_user_meta( $user_id 'signup_ip' $ip );
}
add_action( 'user_register' 'log_ip' );
   
// 添加“IP地址”这个栏目
function  signup_ip( $column_headers ) {
     $column_headers [ 'signup_ip' ] = __( 'IP地址' 'signup_ip' );
     return  $column_headers ;
}
if  ( is_multisite() ) {
     // 添加多站点支持
     add_filter( 'wpmu_users_columns' 'signup_ip' );
else  {
     // 添加单站点支持
     add_filter( 'manage_users_columns' 'signup_ip' );
}
   
// 格式化输出内容
function  ripms_columns( $value $column_name $user_id ) {
     if  $column_name  ==  'signup_ip'  ) {
         $ip  = get_user_meta( $user_id 'signup_ip' , true);
         if  ( $ip  !=  "" ){
             $ret  '<em>' .__( $ip 'signup_ip' ). '</em>' ;
             return  $ret ;
         else  {
             $ret  '<em>' .__( '没有记录' 'signup_ip' ). '</em>' ;
             return  $ret ;
         }
     }
     return  $value ;
}
add_action( 'manage_users_custom_column' ,   'ripms_columns' , 10, 3);

以上代码添加到主题的functions.php文件中即可,另外如果想记录用户的登录IP则可以使用以下代码。(PS两段代码不可以同时使用,其中代码二里面已经包含了代码一的功能)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
//透过代理或者cdn获取访客真实IP
function  get_client_ip() {
     if  ( getenv ( "HTTP_CLIENT_IP" ) &&  strcasecmp ( getenv ( "HTTP_CLIENT_IP" ),  "unknown" ))
         $ip  getenv ( "HTTP_CLIENT_IP" );
     else  if  ( getenv ( "HTTP_X_FORWARDED_FOR" ) &&  strcasecmp ( getenv ( "HTTP_X_FORWARDED_FOR" ), 
"unknown" ))
         $ip  getenv ( "HTTP_X_FORWARDED_FOR" );
     else  if  ( getenv ( "REMOTE_ADDR" ) &&  strcasecmp ( getenv ( "REMOTE_ADDR" ),  "unknown" ))
         $ip  getenv ( "REMOTE_ADDR" );
     else  if  (isset ( $_SERVER [ 'REMOTE_ADDR' ]) &&  $_SERVER [ 'REMOTE_ADDR'
&&  strcasecmp ( $_SERVER [ 'REMOTE_ADDR' ],  "unknown" ))
         $ip  $_SERVER [ 'REMOTE_ADDR' ];
     else
         $ip  "unknown" ;
     return  ( $ip );
}
// 创建一个新字段存储用户注册时的IP地址
add_action( 'user_register' 'log_ip' );
function  log_ip( $user_id ){
     $ip  = get_client_ip();
     update_user_meta( $user_id 'signup_ip' $ip );
}
// 创建新字段存储用户登录时间和登录IP
add_action(  'wp_login' 'insert_last_login'  );
function  insert_last_login(  $login  ) {
     global  $user_id ;
     $user  = get_userdatabylogin(  $login  );
     update_user_meta(  $user ->ID,  'last_login' , current_time(  'mysql'  ) );
     $last_login_ip  = get_client_ip();
     update_user_meta(  $user ->ID,  'last_login_ip' $last_login_ip );
}
// 添加额外的栏目
add_filter( 'manage_users_columns' 'add_user_additional_column' );
function  add_user_additional_column( $columns ) {
     $columns [ 'user_nickname' ] =  '昵称' ;
     $columns [ 'user_url' ] =  '网站' ;
     $columns [ 'reg_time' ] =  '注册时间' ;
     $columns [ 'last_login' ] =  '上次登录' ;
     // 打算将注册IP和注册时间、登录IP和登录时间合并显示,所以我注销下面两行
     /*$columns['signup_ip'] = '注册IP';
     $columns['last_login_ip'] = '登录IP';*/
     unset( $columns [ 'name' ]); //移除“姓名”这一栏,如果你需要保留,删除这行即可
     return  $columns ;
}
//显示栏目的内容
add_action( 'manage_users_custom_column' ,   'show_user_additional_column_content' , 10, 3);
function  show_user_additional_column_content( $value $column_name $user_id ) {
     $user  = get_userdata(  $user_id  );
     // 输出“昵称”
     if  'user_nickname'  ==  $column_name  )
         return  $user ->nickname;
     // 输出用户的网站
     if  'user_url'  ==  $column_name  )
         return  '<a href="' . $user ->user_url. '" target="_blank">' . $user ->user_url. '</a>' ;
     // 输出注册时间和注册IP
     if ( 'reg_time'  ==  $column_name  ){
         return  get_date_from_gmt( $user ->user_registered) . '<br />' .get_user_meta(  $user ->ID,  'signup_ip' , true);
     }
     // 输出最近登录时间和登录IP
     if  'last_login'  ==  $column_name  &&  $user ->last_login ){
         return  get_user_meta(  $user ->ID,  'last_login' , ture ). '<br />' .get_user_meta(  $user ->ID,  'last_login_ip' , ture );
     }
     return  $value ;
}
// 默认按照注册时间排序
add_filter(  "manage_users_sortable_columns" 'cmhello_users_sortable_columns'  );
function  cmhello_users_sortable_columns( $sortable_columns ){
     $sortable_columns [ 'reg_time' ] =  'reg_time' ;
     return  $sortable_columns ;
}
add_action(  'pre_user_query' 'cmhello_users_search_order'  );
function  cmhello_users_search_order( $obj ){
     if (!isset( $_REQUEST [ 'orderby' ]) ||  $_REQUEST [ 'orderby' ]== 'reg_time'  ){
         if ( !in_array( $_REQUEST [ 'order' ], array ( 'asc' , 'desc' )) ){
             $_REQUEST [ 'order' ] =  'desc' ;
         }
         $obj ->query_orderby =  "ORDER BY user_registered " . $_REQUEST [ 'order' ]. "" ;
     }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了小程序应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值