我对多站点很新,所以我仍然对用户管理感到困惑。
我正在尝试为用户浏览音乐创建一个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上运行它 活化
我已经在许可的情况下创建了这个角色,所以它不应该是一个问题,所以我不知道我做错了什么。
答案 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!';
}
只需转到插件并激活新创建的插件即可。中提琴!你完成了!
希望以上帮助那些在多站点添加用户时遇到问题的人。