如果用户已在正确的页面上,如何停止重定向(使用大小写开关)

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

我正在使用WordPress Multisite with Paid Membership Pro,用于两种类型的会员用户(公司、个人)。我为公司用户(例如corporate.mysite.com)提供了子网站,这些用户有权访问mysite上的内容。com。我为各个层和公司用户设置了不同的“仪表盘”。例如,“新手”用户被重定向到mysite。com/新手仪表板/和公司用户被重定向到公司。我的网站。com/仪表板/登录后。每个成员都被设置为订阅者,并根据他们购买的软件包(通过PaidMembershipPro)分配一个用户级ID

也就是说,如果用户试图访问错误的仪表板,我将尝试设置一个函数开关重定向。以下是我迄今为止的设置:

 function dashboard_redirect()
{
    global $current_user, $post;


        switch ($current_user->membership_level->id) {
        case "2":
        // Rookie Member level
        wp_redirect(\'/rookie-dashboard/\');
        break;
        case "3":
        // Player Member level
        wp_redirect(\'/player-dashboard/\');
        break;
        case "4":
        // All-Star Member level
        wp_redirect(\'/allstar-dashboard/\');
        break;
        case "5":
        // Coach Member level
        wp_redirect(\'/coach-dashboard/\');
        break;
        case "6":
        // Owner Member level
        if (! is_page(197) ) { 
            return false; 
        } else {
     wp_redirect(\'/dashboard/\'); 
}
        break;
        case "7":
                if (! is_page(\'/dashboard/\') ) { 
            return false; 
        } else {
        // Corporate
        wp_redirect(\'http://corporate.mysite.com/dashboard/\');
                }
        }   

}

add_action(\'template_redirect\', \'dashboard_redirect\');
我遇到的问题是,当正确的用户出现在他们的仪表板页面上时,会将进程置零。如果我有一个带有重定向的开关casse,我会得到无限循环,所以我尝试向开关添加if/then,但似乎无法使其工作。不知道我做错了什么。

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

问题是template_redirect 在每次公共页面加载时激发。这意味着在您将用户重定向到特定页面后,template_redirect 再次激发,即使它们已经在正确的页面上。您只需添加一个检查,查看它们所在的当前页面是否与它们应该所在的页面相同。

function dashboard_redirect() {
  global $current_user, $post;

  //* Escape early if not on a \'dashboard\' page
  $current = trailingslashit( $_SERVER[ \'REQUEST_URI\' ] );
  if( false === stripos( $current, \'dashboard\' ) ) {
    return;
  }

  switch ( $current_user->membership_level->id ) {
    case "2":
      // Rookie Member level
      $redirect = \'/rookie-dashboard/\';
      break;
    case "3":
      // Player Member level
      $redirect = \'/player-dashboard/\';
      break;
    //* Etc.
  }

  //* Redirect if we\'re not already on the right page
  $current = trailingslashit( $_SERVER[ \'REQUEST_URI\' ] );
  if( $current !== $redirect ) {
    wp_redirect( $redirect );
  }
}

//* Conditionally add action when user tries to access a \'dashboard\' page
$current = trailingslashit( $_SERVER[ \'REQUEST_URI\' ] );
if( false !== stripos( $current, \'dashboard\' ) ) {
  add_action( \'template_redirect\', \'dashboard_redirect\' );
}
添加了示例代码,说明如何有条件地添加挂钩,或者如果我们不在仪表板页面上,如何尽早退出回调。使用其中一个。我可能会使用逃逸方法,但只是因为它更干净。

相关推荐

如何在新用户注册时将wp_USERS->用户登录名插入到wp_Terms中?

当新用户注册时,我需要将wp\\u users->user\\u login字段插入wp\\u terms name和slug字段。我的要求是管理员需要将帖子分配给特定用户,也就是说管理员需要向user1添加帖子,但user2不应该看到这一点。为此,我创建了一个自定义帖子,并为此添加了分类法。术语是用户用户名。因此,我需要在分类法中将用户的用户名作为术语列出。当一个新用户注册时,他的用户名也应该在wp\\u terms表中更新,所以我将用户名作为terms。我在这里绊倒了。请对此提出一些解决方案