Wordpress Multisite将用户添加到主站点

时间:2016-04-28 17:01:00

标签: wordpress wordpress-theming

我对多站点很新,所以我仍然对用户管理感到困惑。

我正在尝试为用户浏览音乐创建一个example.com网站,并为付费用户可以访问的singer.example.com子网站管理他们的私人付费内容,以及为帐户注册。

所以我有主网站"主题1"和子网站"主题2"我将在哪里创建一个控制面板,我已将其放在主题2中,以便创建角色。

add_action('after_switch_theme', 'agent_init');

function agent_init () {
    add_role( 'singer', 'Singer', array( 'read' => true, 'singer_cp' => true ));
    add_role( 'producer', 'Producer', array( 'read' => true, 'developer_cp' => true ));

}

我在子域网站中使用了wp_create_user来成功创建用户,但是当管理员从子域仪表板中删除新创建的用户时,会发生奇怪的事情。当我可以使用** 2个不同的登录*登录主站点和子域站点时,事情变得非常混乱。除非有人对此有解决方案......我将继续讨论下面的解决方案。

我做了什么 在多次尝试失败后,以及在subsite.example.com中使用wp_create_user时遇到很多问题,我决定只切换博客ID,以便新创建的用户可以访问两者 main站点和子站点有1次登录(交叉指责cookie问题)。

我创建了一个测试页面,其中包含以下代码以创建用户。

if (isset($_GET['username'])) {

    $username = $_GET['username'];
    $password = $_GET['password'];
    $email = $_GET['email'];

    if(switch_to_blog(1)) {
        echo 'Successfully Switched Blog!';
    } else {
        echo 'Cannot switch blog';
    }
    $newuser = wp_create_user($username, $password, $email);

    if (is_wp_error($newuser)) {
        echo 'Error Adding';
    } else {
        $user_id = wp_update_user(array('ID' => $newuser, 'role' => 'singer'));
        if (is_wp_error($user_id)) {
            echo 'Something happened when adding role';
        } else {
            echo 'Change role success!';
        }

    }
    if (restore_current_blog())
        echo 'Switch blog back!';
    else
        echo 'Failed switching blog back';
    } else {
        echo 'Welcome. U need variables set in order to add user.';

    }

问题 现在我已经在主站点中添加了用户,我可以在主站点管理仪表板中看到它!

然而,在Dashboard User视图中没有该角色,当我转到mysql时,我可以看到usermeta中的功能被设置为 a:1:{s:6:"歌手&# 34 ;; b:1;} 但是如果我登录用户并调用以下函数,则返回 0 ,这意味着未设置角色。

function is_singer(){
    global $current_user;
    if (current_user_can('singer_cp'))
        return 1;
    else return 0;

}

我错过了什么吗?

  

动作:add_role

     

注意:此设置将保存到数据库中(在表wp_options,字段中)   wp_user_roles),所以最好在theme / plugin上运行它   活化

我已经在许可的情况下创建了这个角色,所以它不应该是一个问题,所以我不知道我做错了什么。

1 个答案:

答案 0 :(得分:1)

我找到了自己的解决方案。

通过 switch_to_blog();

创建用户时

在使用相同的 switch_to_blog();

检查用户功能和角色时,将来总是需要切换博客

检查功能的示例功能

// get user input from input field..
var userInput = document.getElementById("#my-input").value;

xmlHttp = new XMLHttpRequest();
//         HTTP Method, URL, async
xmlHttp.open('POST', '/myJavaEndPoint', true);
// create onreadystatechange callback function,
// it gets called everytime the readyState changes..
xmlHttp.onreadystatechange = function () {
    // readyState 4 means "DONE" - request is complete, responseText now contains the full response..
    if (xmlHttp.readyState == 4) {
        alert(xmlHttp.responseText); // Show the result to the user. 
    }
};
xmlHttp.send(userInput); // Start Request, send the user input as post-payload

如何使用函数检查功能的示例

function is_singer(){
    global $current_user;
    switch_to_blog(1);
    if (current_user_can('singer_cp')) {
        restore_current_blog(); //!IMPORTANT - need to restore blog before return.
        return 1;
    } else {
        restore_current_blog(); //!IMPORTANT - need to restore blog before return.
        return 0;
    }

奖励 - 通过插件添加用户(您只需激活一次停用来创建角色)。使用插件只允许调用此挂钩一次,因为它将在之后添加到数据库中,无需进一步操作。

1)在/ wp-content / plugins中创建一个“initrole”文件夹。 e.g./wp-content/plugins/initrole

2)在新创建的文件夹中创建“initrole.php”文件。

3)将以下代码添加到您的插件中。您可以添加自己的角色名称和自定义功能

if(is_singer()) {
    echo 'User is a Singer!';
} else {
    echo 'User is not a Singer!';
}

只需转到插件并激活新创建的插件即可。中提琴!你完成了!

希望以上帮助那些在多站点添加用户时遇到问题的人。