Answers:
wp_##_options
(wp_99_options)-每个博客都有一个表option_name
=wp_user_roles
wp_user_roles
为wp_##_user_roles
(“ wp_99_user_roles”)您正在编辑将有表option_id
,blog_id
,option_name
,option_value
,autoload
。但是,除了其中=的记录外,请勿更改任何记录。这样的表中将只有一个记录。option_name
wp_user_roles
wp_user_roles
在没有安装多站点的情况下使用,并且在这里看起来好像只是在创建表时的一个错误。
如果这是我很清楚的问题,那么您是在MU安装之后运行内存缓存设置吗?我发现,选项对象显然存在一个缓存问题(在2.9中见证),其中一些好的问题(如wp_user_roles键)卡在了“ notoptions”内存缓存数组中。
如果确实在内存缓存的顶部运行,这听起来像是一种可能性,请尝试通过11211远程登录到计算机。 delete blogid:options:notoptions
,其中blogid是您看到问题的博客的ID。刷新管理面板,然后查看下拉菜单中是否有角色。如果是这样,则说明您已找到问题。
更新:好的,所以您没有发现问题-您没有运行内存缓存。我仍然会检查一下角色对象,寻找一个损坏的或不存在的对象。我相信这是您最好的线索。您可以使用以下代码转储选项表:
global $wpdb;
$array = $wpdb->get_col("SELECT option_name FROM $wpdb->options");
foreach ($array as $key) {
echo $key . ": <code>";
var_dump(get_option($key), true));
echo "</code><br/>";
}
谢谢。此问题表示可靠的10个小时的调试。对我来说,这是一只真正的熊。
为了进一步说明这一点,我在网站上添加了一个功能,该功能可以在您以编程方式创建网站时解决此问题。
基本上,这将检查是否wp_user_roles
在指定博客中进行了设置。如果是这样,则该函数将用于wp_user_roles
以正确的方式设置新选项。
/**
* Sometimes, user roles do not properly get set when a new site is set up
* To fix this issue, we check to make sure the data is added properly and update if not
* See /wordpress/11725/why-are-my-roles-not-visible-in-a-multi-site-network
*/
function maybeAddUserRoles($blog_id){
switch_to_blog($blog_id);
if(get_option('wp_user_roles')){
update_option('wp_'.$blog_id.'_user_roles', get_option('wp_user_roles'));
delete_option('wp_user_roles');
}
restore_current_blog();
}