禁用 wp-admin 到 wp-login 规范重定向(wordpress)

Poo*_*ofy 4 php wordpress redirect canonical-link wp-admin

我正在建立一个网站,使用wordpress+buddypress(最新版本)。

在这个网站中,我有自己的自定义登录|注册|重置密码表单,我不想将它们链接到后端 wp-forms。

我已阻止所有用户的后端表单(默认 wp-login|signup|resetpass 表单)(带有 404 标头代码)

因此,如果您尝试访问 wp-admin/wp-login,您将看到 404。

我不想使用任何类型的重定向 我想停止对特殊 URL 的重定向,以停止从该 URL 到任何其他 URL 的重定向 我想停止从 /wp-admin到 的重定向/wp-login.php?redirect_to=http%3A%2F%2Fsite.com%2Fwp-admin%2F&reauth=1

当您尝试访问 www.example.com/wp-admin但尚未登录时,您将自动重定向到:

example.com/wp-login.php?redirect_to=http%3A%2F%2Fsite.com%2Fwp-admin%2F&reauth=1

您将被重定向... URL 将自动更改, 这是 WordPress 的默认操作。

我想停止自动重定向

当您尝试访问 /wp-admin 时,您必须停留在 /wp-admin (您不应该重定向到 wp-login)。

请参阅这两张图片以了解完整详细信息

图片1:

example.com/wp-admin

图2:

你会看到url自动改变了

* 笔记

404 是我故意发生的......,这不是一个错误。

我已经测试了很多代码,以阻止它。但没有一个对我有用。

代码 1:

remove_action('template_redirect', 'redirect_canonical');
Run Code Online (Sandbox Code Playgroud)

代码 2:

remove_filter('template_redirect', 'redirect_canonical');
Run Code Online (Sandbox Code Playgroud)

代码 3:

add_action(
    'init',
    function () {
        remove_action('template_redirect', 'wp_redirect_admin_locations', 1000);
    }
);
Run Code Online (Sandbox Code Playgroud)

代码 4:

function custom_wp_redirect_admin_locations() {
    global $wp_rewrite;
    if ( ! ( is_404() && $wp_rewrite->using_permalinks() ) )
        return;
    $admins = array(
        home_url( 'wp-admin', 'relative' ),
    );
    if ( in_array( untrailingslashit( $_SERVER['REQUEST_URI'] ), $admins ) ) {
        $wp_query->set_404();
        get_template_part( 404 ); 
        exit();
    }
    $logins = array(
        home_url( 'wp-login.php', 'relative' )
    );
    if ( in_array( untrailingslashit( $_SERVER['REQUEST_URI'] ), $logins ) ) {
        $wp_query->set_404();
        get_template_part( 404 ); 
        exit();
    }
}

function remove_default_login_redirect() {
    remove_action('template_redirect', 'wp_redirect_admin_locations', 1000);
    add_action( 'template_redirect', 'custom_wp_redirect_admin_locations', 1000
    );
}
add_action('init','remove_default_login_redirect');
Run Code Online (Sandbox Code Playgroud)

代码 5:

add_action(
    'template_redirect',
    function () {
        $requ = untrailingslashit($_SERVER['REQUEST_URI']);
        if (site_url('wp-admin', 'relative') ===
        untrailingslashit($_SERVER['REQUEST_URI'])) {
            remove_action('template_redirect', 'wp_redirect_admin_locations', 1000);
        }
    }
);
Run Code Online (Sandbox Code Playgroud)

代码 6:

function custom_wp_redirect_admin_locations() {
    global $wp_rewrite;
    if ( ! ( is_404() && $wp_rewrite->using_permalinks() ) )
        return;

    $requested_url = untrailingslashit( $_SERVER['REQUEST_URI'] );

    $admins = array(
        home_url( 'wp-admin', 'relative' ),
        home_url( 'dashboard', 'relative' ),
        home_url( 'admin', 'relative' ),
        site_url( 'dashboard', 'relative' ),
        site_url( 'admin', 'relative' ),
    );
    if ( in_array( untrailingslashit( $_SERVER['REQUEST_URI'] ), $admins ) ) {
        redirect_canonical( $requested_url , false );
        exit;
    }

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

function remove_default_login_redirect() {
    remove_action('template_redirect', 'wp_redirect_admin_locations', 1000);
    add_action( 'template_redirect', 'custom_wp_redirect_admin_locations', 
    1000);
}

add_action('init','remove_default_login_redirect');
Run Code Online (Sandbox Code Playgroud)

无论我使用什么似乎都没有达到我想要的效果。我该怎么做?


编辑:澄清上下文,这不是重复的。

链接据说是重复的 ,清楚地表明他希望他的 wp-login 页面重定向到他自己的登录/注册页面。

但我明确说了“请阅读前16行”。这意味着我不尝试/想要重定向+我不尝试/想要限制使用任何类型的重定向

另外:在发布本文之前我已经阅读了所有这些文章。但它们都不是我想要的。所以我开始了一个新的主题,并提供了完整的细节。

仅供参考,我还阅读了 7 篇文章(我从中挑选了代码):

但我需要至少 10 个声誉才能发布 2 个以上的链接!所以我不能说超过2个。

  1. 第二篇文章
  2. 第三条
  3. 第五条

我感谢您的时间和关注,但请您再仔细阅读我的问题。

Tom*_*ski 5

首先-解释。

\n\n

当涉及到管理页面时,Wordpress 有点棘手。本质上,当加载管理页面时,wp-admin/admin.php就被包含在内。在这个文件中,有一个调用函数auth_redirect(),它检查用户是否登录,如果没有,则将他重定向到登录页面。

\n\n

由于此功能不是典型的操作/过滤器,因此很难禁用它。幸运的是,它自己调用了几个钩子。其中之一, auth_redirect_scheme,在真正的重定向发生之前被调用。它旨在准备一个用于重定向的“方案”(http/https),但我们可以利用它来满足您的目标。

\n\n

我添加了一个过滤器钩子auth_redirect_scheme,优先级为9999(这并不重要,但我希望它晚点运行,以防万一)。然后,我从原始代码中取出一段代码auth_redirect()来检查用户是否已登录(wp_validate_auth_cookie)。如果他是,我们只需返回值,因为无需执行任何操作。但是,如果用户未登录,我们会显示错误页面并退出脚本(以防止发生重定向)。

\n\n

另外,以防万一我禁用了wp_redirect_admin_locations过滤器。我不太确定是否需要这样做,但是......

\n\n

现在 - 代码。请注意,这可能不是完美的解决方案,需要您进行一些改进。

\n\n
<?php\n/**\n * @packageStop_Redirect\n */\n/*\nPlugin Name: Stop redirect\nPlugin URI: \nDescription: Stop redirecting anything to wp-login\nAuthor: Tomasz Struczy\xc5\x84ski\nVersion: 0.1\nAuthor URI: \n*/\n\nadd_action('init', 'remove_default_redirect');\nadd_filter('auth_redirect_scheme', 'stop_redirect', 9999);\n\nfunction stop_redirect($scheme)\n{\n    if ( $user_id = wp_validate_auth_cookie( '',  $scheme) ) {\n        return $scheme;\n    }\n\n    global $wp_query;\n    $wp_query->set_404();\n    get_template_part( 404 );\n    exit();\n}\n\nfunction remove_default_redirect()\n{\n    remove_action('template_redirect', 'wp_redirect_admin_locations', 1000);\n}\n
Run Code Online (Sandbox Code Playgroud)\n