重定向到特定的页面,如果没有登录WordPress


Redirect to specific page if not logged in WordPress

我试图让它在我的WordPress网站上重定向到一个着陆页,如果用户没有登录,但它总是陷入重定向循环。这就是我(在functions。php中)…

    add_action( 'template_redirect', function() {
        if ( !is_user_logged_in() && ! is_page('login-to-view') ){
            wp_redirect( site_url( '/login-to-view' ) );
            exit();
        }
     });

我知道我聚会迟到了。我听说Big和Pac在摇滚…无论如何,这是我通常做的:

  1. 创建登录页面,例如www.site.com/login
  2. 在我的functions.php中添加了以下代码:
add_action( 'template_redirect', function() {
    if( ( !is_page('login') ) ) {
        if (!is_user_logged_in() ) {
            wp_redirect( site_url( '/login' ) );        // redirect all...
            exit();
        }
    }
});

解释:上面发生的情况是,除了登录页面外,对网站上每个页面的访问都受到限制。如果需要,您可以选择排除或包含其他页面以及wp-admin url。

问题是我在functions.php中有函数。Is_page还不知道它在哪个页面。我把它移到标题,就在doctype声明之前,现在它可以工作了…

if ( ! is_page('login-to-view')  &&  ! is_user_logged_in() ){
    wp_redirect( site_url( '/login-to-view' ) );
    exit();
}

还有一件事要注意…我无法让它在我的本地主机上工作,我想是因为找不到site_url,它只是重定向到localhost:8888/login-to-view

我正在使用MAMP,但我猜你可以在PRO版本中设置URL路径。

假设用户没有登录。

那么你的代码是这样思考的:

  1. 用户是否登录?
  2. 没有?然后执行wp_redirect。

用户被重定向到您的页面,并重新开始该过程。这就是为什么会出现无限循环

试着改变检查的顺序:

<?php 
    add_action( 'template_redirect', function() {
    if ( ! is_page('login-to-view')  &&  ! is_user_logged_in() ){
        wp_redirect( site_url( '/login-to-view' ) );
        exit();
    }
 });