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' );
?>
只需转到您的插件并激活新创建的插件。中提琴!你完成了!
希望以上内容也能帮助那些在多站点中添加用户时遇到问题的人。
我对多站点还很陌生,所以我仍然对用户管理感到困惑。
我正在尝试创建一个 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' );
?>
只需转到您的插件并激活新创建的插件。中提琴!你完成了!
希望以上内容也能帮助那些在多站点中添加用户时遇到问题的人。