Wordpress Multisite 将用户添加到主站点

Wordpress Multisite Add user to main site

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

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

所以我有 "theme 1" 的主站点和 "theme 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 个不同的登录* 登录主站点和子域站点时,事情变得非常混乱。除非有人对此有解决方案...我将继续下面的解决方案。

我做了什么 在多次尝试失败后,以及我在子站点中使用 wp_create_user 时出现的很多问题。example.com,我决定我应该只切换博客 ID,以便新创建的用户可以访问 主站点和子站点均有 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.';

    }

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

但是在仪表板用户视图中没有该角色,当我转到 mysql 时,我可以看到 usermeta 中的功能被设置为 a:1:{s: 6:"singer";b:1;} 但如果我登录到用户并调用以下函数,它 returns 0 哪个表示角色未设置。

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

}

我是不是漏掉了什么?

Action: add_role

NB: This setting is saved to the database (in table wp_options, field wp_user_roles), so it might be better to run this on theme/plugin activation

我已经在权限下创建了角色,所以这应该不是问题,所以我不知道我做错了什么。

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

通过switch_to_blog();

创建用户时

以后在使用相同的 switch_to_blog();

检查用户能力和角色时,必须始终切换博客

检查功能的示例函数

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;
    }

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

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

奖励 - 通过插件添加用户(您只需激活和停用一次即可创建角色)。使用插件允许这个挂钩只被调用一次,因为它会在之后被添加到数据库中,不需要进一步的操作。

1) 在 /wp-content/plugins 中创建一个 "initrole" 文件夹。例如/wp-content/plugins/initrole

2) 在您新创建的文件夹中创建一个 "initrole.php" 文件。

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

<?php
/*
Plugin Name: Custom Create User Role
*/

    function add_roles_on_plugin_activation() {
        remove_role('singer');
        remove_role('producer');
        add_role( 'singer', 'Singer', array( 'read' => true, 'singer_cp' => true ));
        add_role( 'producer', 'Producer', array( 'read' => true, 'producer_cp' => true ));

  }
  register_activation_hook( __FILE__, 'add_roles_on_plugin_activation' );
?>

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

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