WordPress登陆之后返回登陆前的页面
在默认情况,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
请问登陆表单loginform的设置在那个文件里?之前的都修改好了,就差这一步
wp-login.php
第二段代码就是登陆表单的<input>就是调整的隐藏域。
前面没有看清楚,楼主应该都也清楚了,我已经把上面两个地方都修改了,版本也是2.9.2,为什么返回的还是后台界面?
可以登录返回了,但是必须把cookie都删除了,就是说只有第一次登陆有用,退出后或下次再登录这个功能就失效了,不知道楼主那里情况怎样/
本方法不是使用cookie来保存原页面的,而是session,是保存在服务器端的,作用时间为浏览器未关闭之前。
退出后重新登录,原页面网址将重新更改,可以正确返回。
不知道你所说的功能就失效是什么个情况?请确认你使用的是本文的代码。
我这测试一切正常,即使是多次退出又重新登录,也不必删除cookie。
谢谢,我试试看
这样就更像论坛的效果了。
不知道3.01版本好用不
你试过就知道了。
博主真能折腾啊,用wordpress默认的函数不就好了。
登入网站并指向当前页。
<a href="<?php echo wp_login_url( get_permalink() ); ?>" title="Login">Login</a>
这也是不错的方法,而且不用修改WordPress源文件。
正想给自己的blog加上登陆后台以及返回登录之前页面的功能,综合了上面的种种方法,最终整合出了一个自以为完美的方案……与大家交流心得
我Blog的登陆登出是靠侧边栏的小工具实现的,于是修改了default-widgets.php的两个地方
1.修改了方法一中的代码,因为那个是死的,登陆了仍旧显示那个title。既然要进入后台,就直接改成wp-admin/profile.php——未登录便会先跳出登陆界面,所以任何时候点击它直接就是后台~
2.原有的wp_loginout()函数确实很好用,它会自动随登陆状态更改功能。于是我在后面加上了get_permalink——让它始终返回之前的页面~
这就是我所做的修改与应用,WP3.0.3下测试通过!望大家指点
http://www.phpiask.com/?p=149 这里的方法貌似简单些,不知有什么不同
“2.8.5 版本: 查找$redirect_to = admin_url();
修改为:$redirect_to=$_SERVER['HTTP_REFERER'];”
那你知道WordPress多长时间升级一次吗?
还真不知道,ludou 的评论框会记住用户信息,这功能挺好,省得总要重复写那些信息