要求wp-login.php自动发送标头

时间:2015-12-29 作者:Jordan Foreman

我正在网站上创建一个自定义密码重置页面,并试图利用retrieve_password() 发送重置电子邮件。发送重置电子邮件后,我想wp_redirect 用户返回登录页面,并显示一条快闪消息,告诉他们检查电子邮件。问题就在于此:

如果您查看上面的链接,您会注意到Hookr建议使用retrieve_password() 检查函数是否存在,如果不包括wp-login.php, 其中WordPress(核心)定义了该函数。看来我的wp_loaded 处理此过程的操作不会在加载该文件的上下文中发生,因此我需要包括wp-login.php 在我可以使用之前retrieve_password().

问题是wp-login.php 自动执行一些客户端渲染,这会导致发送标头,从而阻止我将来发送标头。wp_redirect() 依赖于头的使用来工作,因此是不可靠的,因为它在后面被称为wp-login.php 包括在内。

看来我有几个选择;即:

包裹require_once \'wp-login.php 在输出缓冲区中,以防止渲染/标题复制+粘贴或重写retrieve_password() 外部wp-login.php, 并引用我的新版本

  • your suggestion here?retrieve_password() 作用

    我相信这之前已经做过了。这里有人有什么建议吗?我是否在寻求一个糟糕的解决方案retrieve_password(), 而不仅仅是写我自己的电子邮件逻辑?

  • 1 个回复
    SO网友:s_ha_dum

    登录页面是一个可怕的烂摊子,它将函数与输出混为一谈。这使得像你这样的项目变得不必要的困难。事实上,现在比过去更好了。

    您可以绕过输出缓冲的问题:

    ob_start();
    include(\'wp-login.php\');
    ob_end_clean();
    
    当然,页面仍然会生成,因此它会消耗资源,效率也不是特别高,但您确实可以访问这些功能。缺点——可能是一个巨大的缺点——是该页面无论如何都会像在后台那样做。如果你不小心,那可能会引起麻烦。