1

我正在尝试为自定义用户页面创建自定义登录页面,但我无法让 wordpress 停止将登录一词重定向到 wp-login.php。

设置非常简单,我正在添加一个看起来像这样的规则。account/login/?$产生于index.php?account=login。我还为该自定义查询变量设置了我的重写标签。我还有其他一些规则设置,它们都可以正常工作。

当我使用猴子人的重写分析器时,一切都正确地指向了,但是在我输入 url 的任何时候login,它都会将我重定向到 wp-login.php。在哪个段输入都没有关系。所以/login, /account/login, /dogs/bulldogs/login.... 都重定向到 wp-login.php

据我所知,没有任何其他重写规则包含login. 所以我很茫然。

作为最后一条信息,我正在使用 wp 3.6

任何建议或想法将不胜感激。

4

2 回答 2

3

我面临着完全相同的问题。谷歌不是很有帮助,所以我需要深入研究。:)

wp-includes/template-loader.php文件的顶部,您可以找到以下代码片段:

if ( defined('WP_USE_THEMES') && WP_USE_THEMES )
    do_action('template_redirect');

如果您检查当时与该操作挂钩的函数,您会发现对wp_redirect_admin_locations函数的引用(钩子和函数都在/wp-includes/canonical.php文件中声明 - 第 526 行)。

wp_redirect_admin_locations函数中,您会发现:

 $logins = array(
      home_url( 'wp-login.php', 'relative' ),
      home_url( 'login', 'relative' ),
      site_url( 'login', 'relative' ),
  );
 if ( in_array( untrailingslashit( $_SERVER['REQUEST_URI'] ), $logins ) ) {
      wp_redirect( site_url( 'wp-login.php', 'login' ) );
      exit;
  }

该问题的一个简单解决方案是将您的功能挂钩到 *wp_redirect* 过滤器。像这样的东西(在你的functions.php中):

add_filter('wp_redirect', 'yourprefix_filter_login_redirect', 10, 2);
function yourprefix_filter_login_redirect($location, $status)
{
     $uri = trim($_SERVER['REQUEST_URI'], '/');

      if ($uri === 'login') {
          return false;
      }

      return $location;
}

所以... *wp_redirect_admin_locations*在尝试执行重定向后终止脚本,因此上述解决方案将不起作用。

我现在看到的唯一其他解决方案是一起绕过该功能,这很糟糕。该函数中定义的所有其他重定向将一起丢失...

无论如何,我最终使用的是:

    add_action(
          'init',
          function() {
              remove_action('template_redirect', 'wp_redirect_admin_locations', 1000);
          }
      );
于 2013-10-13T19:02:33.547 回答
0

基于 Diogos 的出色答案,您甚至可以禁用 /login 重定向而不会丢失其他重定向。我刚刚在 WPSE 上发布了这个解决方案:禁用“/login”重定向

于 2014-02-18T13:55:42.123 回答