很多wordpress博主都设置了登录才能评论的功能,这样一来就必须允许用户注册,很多博主会认为游客和管理员共用一个登录地址会造成安全问题,或者单纯就是为了管理员单独开启一个登录入口。
关注这个问题,百度找到的答案最多的就是修改wp-login.php和general-template.php,对于很对用户很不方便,并且一旦程序更新又要重新修改。下面就介绍一种不用修改文件,单纯通过钩子实现的方法。
效果:只能通过自定义的地址登录wp,原wp-login.php返回404。
首先,通过login_url修改wp_login_url()函数返回的登录地址,该函数被很多主题调用以跳转到登录页;通过logout_url修改wp_logout_url()函数返回的登录地址。
login_url过滤器包含三个参数,$login_url,$redirect,$force_reauth,其中
$login_url(必须),登录用的自定义url,例如http://example.com/my-login-page,默认wp-login.php
$redirect(可选) 登录成功后重定向的地址,默认无。
$force_reauth(布尔值,可选),如果为true,无论cookie什么值,都强制重新认证。
add_filter( <span class=“hljs-string”>’login_url'</span>, <span class=“hljs-string”>’my_login_page'</span>, <span class=“hljs-number”>10</span>, <span class=“hljs-number”>3</span> );
<span class=“hljs-function”><span class=“hljs-keyword”>function</span> <span class=“hljs-title”>my_login_page</span><span class=“hljs-params”>( $login_url, $redirect, $force_reauth )</span> </span>{
<span class=“hljs-keyword”>return</span> home_url( <span class=“hljs-string”>’/my-login-page/?redirect_to='</span> . $redirect );
}
通过以上代码,登录地址则变为/my-login-page
logout_url过滤器需要两个参数,$logout_url和$redirect
$logout_url登出wordpress的url,也就是后台右上角的“登录”的url
$redirect 成功登出后跳转到的地址
add_filter( <span class=“hljs-string”>’logout_url'</span>, <span class=“hljs-string”>’my_logout_page'</span>, <span class=“hljs-number”>10</span>, <span class=“hljs-number”>2</span> );
<span class=“hljs-function”><span class=“hljs-keyword”>function</span> <span class=“hljs-title”>my_logout_page</span><span class=“hljs-params”>( $logout_url, $redirect )</span> </span>{
<span class=“hljs-keyword”>return</span> home_url( <span class=“hljs-string”>’/my-logout-page/?redirect_to='</span> . $redirect );
}
通过以上代码,登出url更改为/my-logout-page
注:通常情况下,我们不会为登录和登出设定两个url,而是通过类似 /my-login-page?action=logout实现登出功能。
第二步,让wp-login.php返回404。
这里需要用到wp_init钩子,判断请求的url是否wp-login.php,如果是,则redirect到404地址。
add_action(<span class=“hljs-string”>’login_enqueue_scripts'</span>,<span class=“hljs-string”>’wp_login_php_404′</span>);
<span class=“hljs-function”><span class=“hljs-keyword”>function</span> <span class=“hljs-title”>wp_login_php_404</span><span class=“hljs-params”>()</span></span>{
$request = parse_url(<span class=“vars”>$_SERVER</span>[<span class=“string”><span class=“hljs-string”>“REQUEST_URI”</span></span>]);
<span class=“hljs-keyword”>if</span>($request[<span class=“hljs-string”>’path'</span>] == <span class=“hljs-string”>’/wp-login.php'</span> && str_pos(wp_get_refer(),home_url( <span class=“hljs-string”>’/my-logout-page'</span> )) !==<span class=“hljs-number”>0</span> ){
wp_safe_redirect(home_url(<span class=“hljs-string”>’/404′</span>));
}
第三步,根目录新建my-login-page,内容只需一行。
require_once('wp-login.php');
其实第三步还有一种是实现方式是类似于第二步的,通过wp_init判断请求地址,如果是my-login-page,则require wp-login.php,可以避免手动新建my-login-page文件。
通过以上三步就完成了wordpress登录地址的自定义。下一篇将介绍如何通过插件为管理员和非管理员指定不同的登录地址。
其他方式
利:简单高效,一键设置
弊:插件太多会使博客响应变慢,不利于用户体验
操作:后台插件列表中搜索安装 Limit Login Attempts, 这款插件安装并启用后就不需要做其他得设置了。如果有人连续登陆失败,这个插件会临时屏蔽他的 IP 地址,使其无法继续登录。
利:不使用插件,简单几行代码轻松搞定安全问题,对网站的影响为0
弊:不懂代码的朋友操作起来会比较费劲
操作:鉴于有一部分朋友不懂代码,下面我将详细的代码写出来,大家只要照着做就行:
1、打开当前主题的functions.php 文件,查找路径为:根目录-/wp-content/-/themes/-/你的主题名/-functions.php
2、复制这段代码:
//保护后台登录
function login_protection(){
if($_GET[‘word’] != ‘shopet’)header(‘Location: https://www.shopet.cn/’);
}
add_action(‘login_enqueue_scripts’,’login_protection’);
3、粘贴到functions.php的结尾处,要在?>之上。
4、覆盖上传,这样只有打开 https://www.shopet.cn/wp-login.php?word=shopet,才会打开登录页,否则就会自动跳转到 https://www.shopet.cn
注意:这是我为我的博客的设置,你要操作的话,就要把https://www.shopet.cn以及word后面的替换成你的,也就是要打开“你的网站/wp-login.php?word=关键词”这条连接。
利:暴力直接
弊:也没啥弊端,只是这样不符合我的SEO审美(处女座怪癖….)
操作:将wp-login.php修改成wp-shopet.php,然后打开这个文件,将里面所有的wp-login.php批量替换成wp-shopet.php。这样登录地址便成了https://www.shopet.cn/wp-shopet.php
以上就是修改wordpress登录地址的三个比较简单的方法,当然还有很多牛逼的方法,但是对于博客来说这种方法也是够用了。