WordPress重定向重定向太多次或根本不重定向

时间:2022-01-20 作者:thisissparzo

我是WordPress的新手。我试图简单地将用户重定向到登录页面,如果他们没有登录就进入帐户页面。

我首先尝试将此代码添加到函数中。php代码:

add_action( \'template_redirect\', \'redirect_if_user_not_logged_in\' );

function redirect_if_user_not_logged_in() && is_page(\'example.com/account\') {
    
    if ( ! is_user_logged_in() ) {
        
        wp_redirect( \'example.com/login\' ); 
        
        exit;
    }
}
这最终一无所获。根本不可能。我也尝试了“admin\\u init”挂钩,但没有什么不同。

我尝试删除关于当前页面的条件语句,并将代码更改为:

add_action( \'template_redirect\', \'redirect_if_user_not_logged_in\' );

function redirect_if_user_not_logged_in() {
    if ( ! is_user_logged_in() ) {
        
        wp_redirect( \'example.com/login\' ); 
        
        exit;
    }
}
这导致;ERR\\u TOO\\u MANY\\u重定向“;Chrome和Microsoft Edge均出错。我本以为这只会重定向一次,但它似乎陷入了一个循环。

我再次尝试了几个不同的钩子以及“init”和“admin\\u init”。

代码位于<;的正下方;?php函数。php。

我不确定我在这里做错了什么。也许我把这段代码放错了文件,或者我需要调整add\\u操作和hook,或者在其他地方使用remove\\u操作。请帮我一把。

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

简短的回答是,如果用户没有登录就进入帐户页面,我只想将他们重定向到登录页面。

尝试使用is_page() 再一次but use the correct syntax: (参见home_url() 有关该函数的更多信息,但这是一种获取WordPress URL的简单方法,您可以传递任何有效路径,如/login/)

add_action( \'template_redirect\', \'redirect_if_user_not_logged_in\' );

function redirect_if_user_not_logged_in() {
    if ( !is_user_logged_in() && is_page( \'account\' ) ) {
        wp_redirect( home_url( \'/login/\' ) );
        exit;
    }
}

更多详细信息

我首先尝试将此代码添加到函数中。php

如果你的函数真的是这样开始的(注意&& is_page 部分),那么这是一个(PHP)语法错误。。

function redirect_if_user_not_logged_in() && is_page(\'example.com/account\') {
其次,你用错了is_page(): is_page(\'example.com/account\') — 如果要检查主WordPress查询(在页面加载时自动运行)是否针对页面(post类型page) 使用特定的slug(在permalink中使用),如account, 那么正确的语法是:

is_page( \'account\' )
// pass just the Page slug; don\'t include the "example.com/"
如果当前页面URL如下,则返回truehttps://example.com/account/ 你的WordPress URL是https://example.com/ (带或不带斜杠)。

我再次尝试了几个不同的钩子以及“init”和“admin\\u init”。

admin_init 仅在管理端运行,即。wp-admin, 所以你不会想用这个钩子做你想做的事。

init 如果您只想重定向而不检查您是否在特定页面上,则可以使用。

否则,您应该使用稍后的钩子,该钩子在WordPress完成对当前URL的解析并设置主查询后运行。

例如,您可以(包括我在内的大多数开发人员也可以)使用template_redirect hook, 就像你最初尝试的那样。

这导致了;ERR\\u TOO\\u MANY\\u重定向“;Chrome和Microsoft Edge均出错。我原以为这只会重定向一次,但它似乎陷入了一个循环。

是的,因为钩子在每次页面加载/请求时都会运行,并且因为您只检查当前用户是否已登录,那么只要用户尚未登录,那么重定向就会在每个页面请求上发生。可以这样说明:

例如,我访问了您的帐户页面。com/accounttemplate_redirect 如果我没有登录到您的站点,则运行hook并检查您的代码,因此您的代码将我重定向到示例。com/login在登录页面上template_redirect 如果我没有登录到您的站点,则运行hook并检查您的代码,因此您的代码将我重定向到示例。com/login在登录页面上template_redirect 如果我登录了你的网站,我会运行hook并检查你的代码。。。就这样一直持续下去,没有结束

因为您的代码无限地将我(或当前用户)重定向到示例。com/登录。。

实际上,你也错误地使用了wp_redirect(): wp_redirect( \'example.com/login\' ) — 因为这实际上会让你https://example.com/example.com/login 而不是https://example.com/login (假设您的WordPress URL使用htpps, i、 e.安全协议)。

因此,请确保使用完全限定的URL,如https://example.com/login 而且不仅仅是example.com/login, 或者,如果您想重定向到自己网站上的某个页面,但要确保该路径有效(即它存在),请使用相对路径