是否在多站点网络中登录时将用户角色重定向到特定页面?

时间:2019-02-27 作者:joq3

我已经为此工作了一段时间了。我想在多站点安装中将特定用户角色重定向到后端的特定页面。我终于能够做到这一点,但我得到一个错误,页面重定向错误,但我可以看到URL是正确的。

代码如下:

add_action(\'wp_login\', function(){
    global $logging_in;
    $logging_in = true;
});

add_action(\'current_screen\', \'primary_login_redirect\');
function primary_login_redirect( $user ) {
    global $logging_in;
    $userID = get_current_user_id();
    $user_info = get_userdata($userID);
    if (($logging_in = true) && ($user_info->primary_blog)) {
        $primary_url = get_blogaddress_by_id($user_info->primary_blog) . \'wp-admin/edit.php?post_type=visitor\';
        $site_id = $user_info->primary_blog;
        if (!current_user_can_for_blog($site_id, \'create_users\')) {
          wp_redirect($primary_url);
          die();
        }
    }
}
为了能够检查功能,我必须创建wp_login 设置的函数$logging_in. 如果我使用具有create_users 功能我直接进入仪表板,但如果我与不具备此功能的用户登录,我将被重定向到example.com/subsite/wp-admin/edit.php?post_type=visitor (其中子网站是用户的主多网站)。但由于某种原因,当这个重定向发生时,我得到了一个错误。The page isn’t redirecting properly 显示在浏览器中。

1 个回复
SO网友:joq3

如果有人感兴趣,以下是解决方案:

add_filter(\'login_redirect\', function( $url, $query, $user ) {
  $user_info = get_userdata($user->ID);
  return get_blogaddress_by_id($user_info->primary_blog) .  \'wp-admin/?login=1\';
}, 10, 3);

add_action(\'current_screen\', function ( $user ) {
    $userID = get_current_user_id();
    $user_info = get_userdata($userID);
    if ($_GET[\'login\'] == 1 && $user_info->primary_blog) {
        $primary_url = get_blogaddress_by_id($user_info->primary_blog) . \'wp-admin/edit.php?post_type=visitor\';
        $site_id = $user_info->primary_blog;
        if (!current_user_can_for_blog($site_id, \'create_users\')) {
          wp_redirect( $primary_url );
          exit();
        }
    }
});

相关推荐

PHP Error in Wordpress Theme

所以我对wordpress的AWS多站点托管有一些问题。每隔几周,我的整个网站实例就会下降。第一次发生时,我收到了500个错误,所以我只是重新启动了实例&;一切都很好。但第二次没有出现500个错误,虽然重新启动工作正常,但理想情况下,我希望完全解决这个问题,所以我深入挖掘了一些&;查看我的php错误日志;找到此项:“PHP警告:my\\u menu\\u walker::start\\u el(&;$output,$item,$depth,$args)的声明应与第61行{filepath