本文最后更新于
2024-02-26,某些文章具有時(shí)效性,若有錯(cuò)誤或已失效,請(qǐng)?jiān)谙路?a href="#comment">留言或聯(lián)系老夜。WordPress站點(diǎn)開放注冊(cè)后,流量大了訪問量上去后后臺(tái)就有一堆的用戶注冊(cè)信息,然而WordPress默認(rèn)的用戶管理界面比較簡單,不方便管理,有時(shí)候還會(huì)經(jīng)常遇到機(jī)器人惡意注冊(cè)等現(xiàn)象,導(dǎo)致網(wǎng)站有一大批僵尸號(hào),一個(gè)個(gè)找、排除明顯不是辦法。但是有不能不處理,今天就教大家手動(dòng)添加代碼修改用戶管理界面,直接顯示用戶的注冊(cè)IP以及地址。對(duì)于一些不法分子直接封禁IP段即可,同時(shí)還可以清理長期不活躍的僵尸號(hào)。雖然WordPress有著強(qiáng)大的插件拓展,但是插件多了還是會(huì)影響WordPress站點(diǎn)的打開速度的,有能力的盡量修改代碼,畢竟WordPress還是挺適合折騰的。
代碼如下:
//這里是相關(guān)代碼……
//// --------------- WordPress成員注冊(cè)顯示注冊(cè)日期以及IP ------------- ////
/**
* add the register record.
*/
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);
}
// 創(chuàng)建一個(gè)新字段存儲(chǔ)用戶注冊(cè)時(shí)的IP地址
add_action('user_register', 'log_ip');
function log_ip($user_id){
$ip = get_client_ip();
update_user_meta($user_id, 'signup_ip', $ip);
}
// 創(chuàng)建新字段存儲(chǔ)用戶登錄時(shí)間和登錄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'] = '網(wǎng)站';
$columns['reg_time'] = '注冊(cè)時(shí)間';
$columns['signup_ip'] = '注冊(cè)IP';
$columns['last_login'] = '上次登錄';
// 打算將注冊(cè)IP和注冊(cè)時(shí)間、登錄IP和登錄時(shí)間合并顯示,所以我注銷下面兩行
/*$columns['signup_ip'] = '注冊(cè)IP';*/
$columns['last_login_ip'] = '登錄IP';
unset($columns['name']);//移除“姓名”這一欄,如果你需要保留,刪除這行即可
return $columns;
}
//顯示欄目的內(nèi)容
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;
// 輸出用戶的網(wǎng)站
if ( 'user_url' == $column_name )
return ''.$user->user_url.'';
// 輸出注冊(cè)時(shí)間和注冊(cè)IP
if('reg_time' == $column_name ){
return get_date_from_gmt($user->user_registered) ;
}
// 輸出注冊(cè)時(shí)間和注冊(cè)IP
if('signup' == $column_name ){
return get_user_meta( $user->ID, 'signup_ip', true);
}
// 輸出最近登錄時(shí)間和登錄IP
if ( 'last_login' == $column_name && $user->last_login ){
return get_user_meta( $user->ID, 'last_login', ture );
}
// 輸出最近登錄時(shí)間和登錄IP
if ( 'last_login_ip' == $column_name ){
return get_user_meta( $user->ID, 'last_login_ip', ture );
}
return $value;
}
// 默認(rèn)按照注冊(cè)時(shí)間排序
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']."";
}
}
以上代碼僅供預(yù)覽,詳情代碼請(qǐng)?jiān)谖恼碌撞肯螺d即可,代碼部分直接添加到主題目錄下的functions.php文件中即可。修改之前記得備份修改的文件……
修改后效果如圖:

務(wù)必要用代碼編譯軟件修改,如notepad++本站都有下載,禁止用電腦自帶的筆記本修改,否則后果如下圖:

修改好代碼后,在wordpress后臺(tái)–用戶的區(qū)域就開始自動(dòng)記錄用戶的注冊(cè)時(shí)間和IP,以及上一次登錄的時(shí)間和IP了,如有其他問題歡迎文章底部留言。
附
件
下
載
夜雨聆風(fēng)

幫我加一個(gè)唄,謝謝了。。。