我正在使用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,但似乎无法使其工作。不知道我做错了什么。
最合适的回答,由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\' );
}
添加了示例代码,说明如何有条件地添加挂钩,或者如果我们不在仪表板页面上,如何尽早退出回调。使用其中一个。我可能会使用逃逸方法,但只是因为它更干净。