WordPress登陆之后返回登陆前的页面

Ludou
文章目录

     在默认情况,WordPress博客登陆之后会直接进入管理后台,但是若想登陆后返回登陆前的页面该怎么办呢?在WordPress中文论坛有个网友提起了这个问题,下面是我给他提供的解决方案:

方法一:添加超链接

你可以在主题目录下的sidebar.php或者其他文件中添加以下登陆超链接:

1
<a href="<?php echo wp_login_url( get_permalink() ); ?>" title="登陆后台">登陆后台</a>

这样在侧边栏点击这个链接登陆后就会自动返回登录前的页面。感谢网友"快乐生活"的分享

方法二:修改WordPress源代码

     如果你是使用了WordPress提供的"功能"小工具来添加的登陆链接,上面的方法就不能奏效了,只能通过修改源代码来实现了。在Wordpress安装目录下找到wp-login.php,用文本编辑器之类的打开,在 <?php 下面添加以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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'];
}

     接着查找以下代码:

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

     将其改成:

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

本文版权归露兜博客所有,转载引用请完整注明以下信息:
本文作者:Ludou
本文标题:WordPress登陆之后返回登陆前的页面
本文地址:http://www.ludou.org/wordpress-back-to-page-earlier-after-land.html

露兜博客博主,男生,业余Web程序员,儒家思想受益者。文采不佳,不喜欢聚光灯,不喜欢吹牛,不喜欢无序的做事方式。闲时喜欢写些代码自娱自乐,并在博客中分享一些个人技术经验。

标签: , ,

15 条评论

我来说两句
  1. jerry

    请问登陆表单loginform的设置在那个文件里?之前的都修改好了,就差这一步

  2. jerry

    前面没有看清楚,楼主应该都也清楚了,我已经把上面两个地方都修改了,版本也是2.9.2,为什么返回的还是后台界面?

    • jerry

      可以登录返回了,但是必须把cookie都删除了,就是说只有第一次登陆有用,退出后或下次再登录这个功能就失效了,不知道楼主那里情况怎样/

      • Ludou

        本方法不是使用cookie来保存原页面的,而是session,是保存在服务器端的,作用时间为浏览器未关闭之前。

        退出后重新登录,原页面网址将重新更改,可以正确返回。

        不知道你所说的功能就失效是什么个情况?请确认你使用的是本文的代码。

        我这测试一切正常,即使是多次退出又重新登录,也不必删除cookie。

  3. 有点蓝

    这样就更像论坛的效果了。

  4. LDY

    不知道3.01版本好用不

  5. 快乐生活

    博主真能折腾啊,用wordpress默认的函数不就好了。
    登入网站并指向当前页。
    <a href="<?php echo wp_login_url( get_permalink() ); ?>" title="Login">Login</a>

  6. Lunary

    正想给自己的blog加上登陆后台以及返回登录之前页面的功能,综合了上面的种种方法,最终整合出了一个自以为完美的方案……与大家交流心得

    我Blog的登陆登出是靠侧边栏的小工具实现的,于是修改了default-widgets.php的两个地方

    1.修改了方法一中的代码,因为那个是死的,登陆了仍旧显示那个title。既然要进入后台,就直接改成wp-admin/profile.php——未登录便会先跳出登陆界面,所以任何时候点击它直接就是后台~

    2.原有的wp_loginout()函数确实很好用,它会自动随登陆状态更改功能。于是我在后面加上了get_permalink——让它始终返回之前的页面~

    这就是我所做的修改与应用,WP3.0.3下测试通过!望大家指点

  7. sam

    http://www.phpiask.com/?p=149 这里的方法貌似简单些,不知有什么不同
    “2.8.5 版本: 查找$redirect_to = admin_url();
    修改为:$redirect_to=$_SERVER['HTTP_REFERER'];”

发表评论

因博主长期在外地出差,您的留言可能暂时不会得到回复。

订阅评论