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

日期: 标签:phpWebWordPress教程
如需帮忙改代码,或者WordPress二次开发、PHP网站建设等需求,可联系我购买付费服务:  点此联系我
文章目录

如果你想实现前台登录功能,可以参考这篇文章:WordPress实现前台登录功能

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

方法一:添加超链接

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

<a href="<?php echo wp_login_url( home_url(add_query_arg(array(),$wp->request)) ); ?>" title="登陆后台">登陆后台</a>

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

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

-- 完 --

本文采用 「CC BY-NC-SA 4.0」创作共享协议,转载请标注以下信息:
原文出处:露兜即刻 https://www.ludou.org/wordpress-back-to-page-earlier-after-land.html
露兜
kaapass@outlook.com  QQ 825533758

业余编程爱好者。

25 条留言

点此留言
  1. jerry

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

    • Ludou

      @jerry wp-login.php

      第二段代码就是登陆表单的<input>就是调整的隐藏域。

  2. jerry

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

    • jerry

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

      • Ludou

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

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

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

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

        • jerry

          @Ludou 谢谢,我试试看

  3. 有点蓝 有点蓝

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

  4. LDY LDY

    不知道3.01版本好用不

  5. 快乐生活

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

    • Ludou

      @快乐生活 这也是不错的方法,而且不用修改WordPress源文件。

  6. Lunary

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

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

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

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

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

  7. sam sam

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

    • Ludou

      @sam 那你知道WordPress多长时间升级一次吗?

      • sam sam

        @Ludou 还真不知道,ludou 的评论框会记住用户信息,这功能挺好,省得总要重复写那些信息

  8. chonghua chonghua

    不过,我要登录别人的博客干嘛呢?

  9. 路人甲

    不行哦

  10. zzs

    我用第一种方法直接把代码粘到sidebar.php里。登出后就再也登不进去了。用什么方法能把它删掉呢?或者能不能用数据库回档呢?

    • 露兜

      @zzs 能否给个示例链接看看。

  11. 淡忘~浅思 淡忘~浅思

    wordpress 3.9登陆不了后台 露兜有没有解决方法

  12. 小艾博客 小艾博客

    我来看看 顺便请您回访

  13. lehoolihao

    你好博主,最近一直再看你的博客,有较大帮助啊。请问你的文章中的代码块是如何实现的?是用的插件吗?

  14. 雨小睡

    好东西,已经收下了,谢谢。
    有没有注销后返回原页面的方法呢?

  15. 久光 久光

    5.0.4实测可行,感谢博主

发表留言