简短的回答是,如果用户没有登录就进入帐户页面,我只想将他们重定向到登录页面。
尝试使用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如下,则返回true
https://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并检查你的代码。。。就这样一直持续下去,没有结束最终,浏览器放弃了,抛出了错误,“No No No msserror.dll;ERR\\u TOO\\u MANY\\u重定向;。
因为您的代码无限地将我(或当前用户)重定向到示例。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
, 或者,如果您想重定向到自己网站上的某个页面,但要确保该路径有效(即它存在),请使用相对路径