Wordprsss留言模块里有一个不太完美的地方,即普通用户可以使用管理员的昵称和邮箱进行评论,这样一来就会有人去冒充该网站的管理员进行发广告或者散播一些不当言论,对站长造成不必要的困扰。
解决方法如下:
functions.php页面里增加代码:
#-----------------------------------------------------------------#
# 评论中高亮站长
#-----------------------------------------------------------------#
function filter_get_comment_author( $author, $comment_comment_id, $comment ) {
if(is_admin()) return $author; // 过滤后端
//遍历用户
$blogusers = get_users([ 'role__in' => [ 'administrator' ] ]);
foreach ( $blogusers as $user ){
if( $author == $user->display_name ){
$webMaster = '<span class="master">'.$author.'</span>';
return $webMaster;
}
};
return $author;
};
add_filter( 'get_comment_author', 'filter_get_comment_author', 10, 4);
利用了get_comment_author
钩子过滤评论输出用户名,然后遍历网站里的administrator
用户,判断当前输出的用户名是否为站长,是则高亮显示。(利用master样式进行高亮)
#-----------------------------------------------------------------#
# 留言时过滤站长
#-----------------------------------------------------------------#
function filter_pre_comment_author_name( $cookie_comment_author_cookiehash ) {
//遍历用户
$blogusers = get_users([ 'role__in' => [ 'administrator' ] ]);
foreach ( $blogusers as $user ){
if( $cookie_comment_author_cookiehash == $user->display_name ){
return $cookie_comment_author_cookiehash.'的崇拜者';
}
};
return $cookie_comment_author_cookiehash;
};
//判断当前用户登录状态
if( !is_user_logged_in() ){
add_filter( 'pre_comment_author_name', 'filter_pre_comment_author_name', 10, 1 );
}
利用了pre_comment_author_name
钩子在发表评论时进行过滤用户名,同样遍历一遍网站里的administrator
用户,判断当前用户是否为假冒站长,是则非常恶趣味的在昵称的后面加入“的崇拜者”。
在这之后,判断当前用户的登录状态,如果已登录则无需使用这个钩子。
最后附赠一个本站使用的高亮样式:
.master{
color: #26a8ed;
&::after{
content: '[站长]';
margin: 0px 5px;
font-size: 1.2rem;
font-style:italic;
}
}