为什么我的角色在多站点/网络中不可见?


16

我的网络在某些站点而不是其他站点显示角色。

由于某种原因,我无法解释,因此当我添加新用户时,在我的网络子站点的下拉框中没有可供选择的角色。另外,分配给网站的新用户也没有显示在该网站的用户列表中。

这可以解决吗?

下面是当前情况的图片。

角色未显示

下面的图片显示了主站点及其适当的角色,但网络的子站点却没有。

角色展示

Answers:


29
  1. 确定您的多站点博客ID。我将以99为例
  2. 进入数据库
  3. 转到此表:wp_##_options(wp_99_options)-每个博客都有一个表
  4. 查找记录,其中option_name=wp_user_roles
  5. 将文本更改wp_user_roleswp_##_user_roles(“ wp_99_user_roles”)

您正在编辑将有表option_idblog_idoption_nameoption_valueautoload。但是,除了其中=的记录外,请勿更改任何记录。这样的表中将只有一个记录。option_namewp_user_roles

wp_user_roles 在没有安装多站点的情况下使用,并且在这里看起来好像只是在创建表时的一个错误。


谢谢!此处提供救生建议。这是正确的答案。
ZaMoose

1
我的表中没有“ wp_user_roles”,我所做的是将wp_4_options> wp_user_roles(一个大的json对象或一个序列化的数组,我不知道)的内容复制到一个名为wp_5_options的新记录(这是博客角色缺失)。解决了我的问题。尽管如此,还是投票+1,因为它使我
步入

我还解决了从主wp_options表中删除记录“ wp _ ## _ user_roles”的问题,因为它似乎覆盖了wp _ ## _ options中的记录。
Paolo

1
辉煌的答案!
jnthnclrk

7
对于已迁移您的网站并更改了前缀的用户,错误可能是“ wp _ ## _ user_roles”而不是“ {new_prefix} _ ## _ user_roles”
Xhynk 2014年

2

如果这是我很清楚的问题,那么您是在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/>";
}

编辑。我不知道内存缓存如何进入我的服务器。我根本不使用它。也许是因为我安装了w3缓存。我尝试了删除,这给了我一条消息,提示not_found。我继续使用并禁用了内存缓存,因为我没有使用它。我仍然有问题。
地理位置

抱歉,这不能解决您的问题。我经常遇到这个问题,所以这是我最好的猜测。我将继续研究该博客的角色对象。是否存在?更新了我上面的答案,希望对您有所帮助。
编辑者

1

重新安装WordPress并从Updraft Plus备份还原后,我在多站点安装中遇到了这个问题。

当我检查user_roles记录时,option_name仍设置为原始的四个字符前缀,例如pre1_user_roles,而第二次安装的前缀则类似pre2_user_roles

我将其更新为pre2_user_roles,这些选项立即重新出现在用户选项页面中。


1

谢谢。此问题表示可靠的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();
  }

0

我只想对本文表示感谢,因为我一直在寻找解决此问题的方法。

仅仅是因为我使用了一个插件来克隆我的网站,却从未wp_##_user_roles正确更新过。从其复制过来的站点wp_13...被克隆到新站点,wp_81...但此条目仍停留在wp_13


0

我只想指出,有些人可能仍然有一个空的站点用户表,特别是针对其根站点的表。如果发生此问题,请执行以下操作来解决此问题:

  1. 去桌子 wp_usermeta
  2. 使用meta_key查找任何条目 wp_capabilities
  3. 将meta_key从wp_capabilities更改为wp_1_capabilities

我相信“ 1”始终是根站点的ID。

干杯。


wp_前缀设置sinde wp-config.php,只是默认wp_。的1的确是根网站。但这不是必须的,1因为这是自动生成的唯一且递增的ID。
kaiser
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.