停止对/wp-登录的/wp-admin调用的重定向

时间:2017-02-25 作者:Poofy

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

在这个网站上,我有自己的自定义登录|注册|重置通行证表单,我不想将它们链接到后端wp表单。

我还阻止了所有用户的后端表单(默认wp login | signup | resetpass表单)(使用404)

因此,如果您尝试访问wp管理员/wp登录,您将看到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
而你是not logged in, 您将自动重定向到:

example.com/wp-login.php?redirect_to=http%3A%2F%2Fsite.com%2Fwp-admin%2F&reauth=1
您将被重定向
URL将自动更改
这是wordpress的默认操作。

i want to stop that automatic redirection.

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

请看这些2pictures 对于full details :
1 - picture 1 - yoursite.com/wp-admin
2 - picture 2 - you see the url changed automatically..

  • NOTE : 404是我用自定义代码制作的。。。,这不是一个错误

    代码1:

    remove_action(\'template_redirect\', \'redirect_canonical\');
    
    代码2:

    remove_filter(\'template_redirect\', \'redirect_canonical\');
    
    代码3:

    add_action(
          \'init\',
          function() {
              remove_action(\'template_redirect\', \'wp_redirect_admin_locations\', 1000);
          }
      );
    
    代码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\');
    
    编码编号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 );
    }
    }
    );
    
    代码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\');
    
    无论我用什么,似乎都不是我想要的。我该怎么做?

    非常感谢。

    编辑:这不是重复的。我也读过这些文章:1-this article
    2-this article
    3-this article

1 个回复
最合适的回答,由SO网友:Poofy 整理而成

感谢托马斯斯特鲁琴斯基,他完整地解释并回答了我的问题

You Can See The Answer At This Link


第一-解释。

说到管理页面,Wordpress有点棘手。本质上,当加载管理页面时,wp-admin/admin.php 正在包括在内。在这个文件中,有一个对函数的调用auth_redirect() 它检查用户是否已登录,如果未登录,则将其重定向到登录页面。

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

我添加了一个过滤器挂钩auth_redirect_scheme, 优先级为9999(这并不重要,但我希望它运行得晚一些,以防万一)。然后我从原文中提取了一段代码auth_redirect() 用于检查用户是否登录(wp_validate_auth_cookie). 如果他是,我们只返回值,因为什么都不用做。但是,如果用户未登录,我们将显示一个错误页面并退出脚本(以防止发生重定向)。

还有,以防万一我禁用了wp_redirect_admin_locations 滤器我不确定是否需要,但是。。。

现在-代码。记住,这可能不是完美的解决方案,需要您的部分进行一些改进。

<?php
/**
 * @packageStop_Redirect
 */
/*
Plugin Name: Stop redirect
Plugin URI: 
Description: Stop redirecting anything to wp-login
Author: Tomasz Struczyński
Version: 0.1
Author URI: 
*/

add_action(\'init\', \'remove_default_redirect\');
add_filter(\'auth_redirect_scheme\', \'stop_redirect\', 9999);

function stop_redirect($scheme)
{
    if ( $user_id = wp_validate_auth_cookie( \'\',  $scheme) ) {
        return $scheme;
    }

    global $wp_query;
    $wp_query->set_404();
    get_template_part( 404 );
    exit();
}

function remove_default_redirect()
{
    remove_action(\'template_redirect\', \'wp_redirect_admin_locations\', 1000);
}

相关推荐

“无法修改标题信息”意味着我不能使用wp_reDirect

我在一个网站上工作,新用户希望在继续之前同意阅读我们的网站政策。新用户登录后,将重定向到策略页面。要继续阅读该网站,他们需要勾选“我同意”框。我的问题是,用户不再被定向到策略页面,重定向失败。这是我收到的错误消息:PHP Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/wp-includes/class.wp-styles.php:225) in /v