随着网站注册的开放很多相应的问题也随之而来,比如说需要限制注册人群,以及防止机器注册,我们可以添加一个验证问题来解决《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'
].
""
;
}
}
|
本文标签:functions.php