根据wp用户角色将登录用户重定向到特定页面,页面ID

时间:2021-01-21 作者:john zuh

我试图根据以下条件将用户(订阅者)重定向到特定页面1. (subscriber) user is logged on 2. specific page id is matched 3. wp user role = subscriber 这是在平台上注册用户时的默认角色集

我面临的挑战是条件1和2有效,但条件3无效。

这是我的代码:

function add_login_check()
{
    if ( is_user_logged_in() && is_page(1865)) {
        wp_redirect(\'http://destredirectedpage.php\');
        exit;
    }
}
add_action(\'wp\', \'add_login_check\');
有趣的是,当我使用管理员角色测试上述代码时,它可以正常工作,但使用订阅者角色时,我会在登录时自动重定向到订阅者配置文件页面。

2 个回复
SO网友:admcfajn

我们可以检查$request 传递给我们的login_redirect 使用筛选函数url_to_postid.

// redirect subscribers if logging in from specific page
function wpse381872_login_redirect( $redirect_to, $request, $user ) {

    // turn the request url into a post-id
    $request_id = url_to_postid( $request );

    if ( isset( $user->roles ) && is_array( $user->roles ) ) {
        // check for subscribers logging in via 1865
        if ( 1865 === request_id && in_array( \'subscriber\', $user->roles ) ) {
        
            $redirect_to = \'http://destredirectedpage.php\';
            
        }
    }

    return $redirect_to;
}

add_filter( \'login_redirect\', \'wpse381872_login_redirect\', 10, 3 );

SO网友:Gonçalo Peres

另一个解决方法是使用current_user_can, 考虑特定角色具有的权限。假设订阅者可以编辑帖子,可以执行以下操作

function add_login_check()
{
    if (is_user_logged_in()  && !current_user_can(\'edit_posts\')) {
        if (is_page(1865)){
            wp_safe_redirect( get_permalink(\'447\'));
            exit; 
        }
    }
}

相关推荐

WooCommerce将_to_Cart()添加到Cart(),则wp_Safe_ReDirect()失败

用户单击一个链接以选择他们想要的产品类型,因此我使用以下代码计算要添加的产品:WC()->;购物车->;将\\u添加到\\u购物车(6842,1);然后我尝试直接去结帐:wp\\u safe\\u重定向(wc\\u get\\u checkout\\u url());但它不会将产品添加到购物车中。但是如果我跳过重定向,它会工作,但不会去我想去的地方。我做错了什么?