基本上我有两个用户角色可以访问我的网站,第一个是订阅者,第二个是客户,我希望他们符合某些条件:
我在下面有这个代码,但它给了我一个问题,不知道为什么在进入商店页面后将我的客户重定向到“我的帐户”页面:
add_action( 'template_redirect', 'subscribers_redirection' );
function subscribers_redirection() {
if ( !is_user_logged_in() && !current_user_can( 'subscriber' ) && !current_user_can( 'customer' ) && ( is_shop() || is_product_category() || is_product_tag() || is_product() ) ) {
wp_redirect( home_url( '/register' ) );
} else if ( is_user_logged_in() && current_user_can( 'subscriber' ) && !current_user_can( 'customer' ) && ( is_shop() || is_product_category() || is_product_tag() || is_product() ) ){
wp_redirect( home_url( '/id-confirmation' ) );
} else if ( is_user_logged_in() && current_user_can( 'subscriber' ) && current_user_can( 'customer' ) && ( is_shop() || is_product_category() || is_product_tag() || is_product() ) ){
wp_redirect( home_url( '/shop' ) );
} else if ( is_user_logged_in() && is_page( 'Register' ) ){
wp_redirect( home_url( '/my-account' ) );
} else if ( !current_user_can( 'subscriber' ) && is_page( 'id-confirmation' ) ){
wp_redirect( home_url( '/register' ) );
exit();
}
}
我的假设:
我认为由于某种原因,我的客户首先被重定向到注册页面,但其中一个条件是,如果您是客户并且在注册页面上,您将被重定向到“我的帐户”页面,这就是为什么他们在去购物后被重定向到首先注册的原因。
我也用下面的其他代码测试过:
add_action( 'template_redirect', 'verify_logged_in' );
function verify_logged_in() {
if ( !is_user_logged_in() ) {
if ( is_shop() || is_product_category() || is_product_tag() || is_product() || is_page( 'id-confirmation' ) ) {
wp_redirect( home_url( '/register' ) );
} else ( is_user_logged_in() ) {
function subscribers_redirection() {
$current_user = wp_get_current_user();
$user_id = $current_user->ID;
$user_info = get_userdata($user_id);
$user_rols = implode(', ', $user_info->roles) . "\n";
switch ($user_rols) {
case "subscriber":
if ( is_shop() || is_product_category() || is_product_tag() || is_product() ) {
wp_redirect( home_url( '/id-confirmation' ) );
} else if ( is_page( 'Register' ) ) {
wp_redirect( home_url( '/my-account' ) );
} else {
exit();
}
break;
case "customer":
if ( is_page( 'id-confirmation' ) || is_page( 'Register' )) {
wp_redirect( home_url( '/my-account' ) );
} else {
exit();
}
break;
default:
exit();
}
}
add_action( 'template_redirect', 'subscribers_redirection' );
}
}
}
但是第二个if语句“如果已登录”则无效。与第一个代码不同,我没有假设为什么不能使用第二个代码。
答案 0 :(得分:0)
您可能需要这种脚本方式吗?至于我,这个算法更难以理解。如果wp_redirect在您的网站上正常工作,那么此过滤器将按预期工作。首先,您检测访问页面,然后检查登录状态。 (true_case) ? something_one : something_two
与if (true) { something_one } else { something_two }
相同。
if (is_shop() || is_product_category() ||
is_product_tag() || is_product() || is_page( 'id-confirmation' )) {
(is_user_logged_in()) ? subscribers_redirection() : wp_redirect(home_url('/register'));
}
此外,您有太多重复的代码。尝试简化它,因为这样的简单任务不需要它的一半。