WordPress登陆成功之后跳转回登陆前访问页面

  • A+
所属分类:Web开发

在默认情况,WordPress博客登陆之后会直接进入管理后台,假如许多Wordpress站点可以设置需要登录才能访问内容的功能,但是有些访客在使用社会化登陆(例如:QQ)后直接就跳转回了首页,如果是比较老的文章就需要通过搜索来找到之前访问的页面,如果我们想登陆后返回登陆前访问的页面该怎么办呢?

在WordPress中文论坛有个网友提起了这个问题,下面是网友给他提供的解决方案(测试可用):

方法一:修改WordPress源代码

在Wordpress安装目录下找到wp-login.php,用文本编辑器之类的打开,在 <?php 下面添加以下代码:

if (!isset($_SESSION)) { session_start(); //创建一个session会话 session_regenerate_id();}if (isset($_SERVER['HTTP_REFERER']) && $_SERVER['HTTP_REFERER'] != '' && strpos($_SERVER['HTTP_REFERER'],'admin') == false&& strpos($_SERVER['HTTP_REFERER'],'login') == false){ // 登陆前的页面地址 // 如果你想登陆后返回首页,请将 $_SERVER['HTTP_REFERER'] 改成 'http://你的首页网址' $_SESSION["REFERER"] = $_SERVER['HTTP_REFERER']; }

 

接着查找以下代码:

<input type="hidden" name="redirect_to" value=" <?php  echo esc_attr ( $redirect_to ) ;  ?>" />

 

将其改成:

<input type="hidden" name="redirect_to" value=" <?php if ( isset ( $_SESSION [ "REFERER" ] ) ) { echo $_SESSION [ "REFERER" ] ; } else { echo esc_attr ( $redirect_to ) ; } ?>" />

 

注:如果代码报错,请检查后面改的一名代码中?后面是不是有一个/,如果有,请删除
好了,大功造成!实现的原理很简单,就是使用了php的SESSION会话功能,打开wp-login.php首先会创建$_SESSION["REFERER"] ,它的值为登陆前的页面地址,即$_SERVER['HTTP_REFERER']。如果登陆前的网址中含有login或者admin,则不创建$_SESSION["REFERER"] ,因为这可能是登陆失败或者注销退出的情况,这样在登陆成功又跳回登录页就不好玩了。

接着是登陆表单loginform的设置,搜索name="redirect_to"的隐藏域,这个隐藏域控制登陆后跳转的目标页,我们这里这样设置:如果$_SESSION["REFERER"]已有值,则设置其跳转到登陆前的页面,否则使用默认的调转方式。

注意:以上内容在WordPress 4.9.2下测试成功,其他版本暂未测试,需要的话自己试试。另外WordPress每次自动升级会覆盖掉原来的相关文件,升级前先对wp-login.php做好备份,或者升级后照着上面的内容重新修改一遍。

下载服务恢复

发表评论

:?::razz::sad::evil::!::smile::oops::grin::eek::shock::???::cool::lol::mad::twisted::roll::wink::idea::arrow::neutral::cry::mrgreen:

Captcha Code