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

时间:2011-03-11 作者:Geo

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

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

这是可以修复的吗?

下面是当前形势的图像。

Roles not Showing

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

Roles showing

7 个回复
SO网友:Nashville Website Design

确定您的多站点博客ID。我将以99为例进入数据库转到下表:wp_##_options (wp\\u 99\\u选项)-您将为每个博客创建一个表,查找记录,其中option_name = wp_user_roleswp_user_roles 到wp_##_user_roles (“wp\\u 99\\u user\\u roles”)您正在编辑的表将具有option_id, blog_id, option_name, option_value, autoload. 然而DO NOT CHANGE ANY RECORD 除了记录option_name = wp_user_roles. 此表中只有一条这样的记录。

wp_user_roles 在没有多站点安装的情况下使用,在这里,创建表时似乎只是一个bug。

SO网友:Richard Hare

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

当我检查user_roles 记录时,option\\u name仍设置为原始的四个字符前缀,例如pre1_user_roles, 而第二次安装的前缀是pre2_user_roles.

我将此更新为pre2_user_roles 选项会立即重新出现在用户选项页面中。

SO网友:editor

如果这是我非常了解的问题,那么您在安装MU之后运行memcache安装程序?我发现options对象显然存在缓存问题(见2.9),其中一些好的东西(如wp\\u user\\u roles键)卡在了“notoptions”memcache数组中。

如果您确实在memcache上运行,这听起来很有可能,请尝试通过11211远程登录到机器。类型delete blogid:options:notoptions, 其中,blogid是您在其上看到问题的博客的id。刷新管理面板,查看下拉列表中是否有角色。如果是这样,你已经找到了你的问题。

UPDATE: 好的,所以您没有发现问题——您没有运行memcache。我仍然会检查roles对象,寻找一个已损坏或不存在的对象。我相信这是你最好的线索。您可以使用此代码转储选项表:

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

SO网友:Alex Standiford

非常感谢。此问题代表了长达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 https://wordpress.stackexchange.com/questions/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();
  }

SO网友:Joseph Dowdy

我只是想对你的这篇文章表示感谢,因为我一直在寻找解决这个问题的方法。

这仅仅是因为我使用了一个插件来克隆我的网站,而它从未更新wp_##_user_roles 正确地当站点从复制时wp_13... 它被克隆到一个新站点wp_81... 但这个条目仍然停留在wp_13.

SO网友:jamilj

我只想指出,有些人可能仍然有一个专门针对其根站点的空站点用户表。如果出现此问题,解决此问题的方法是执行以下操作:

去餐桌旁wp_usermeta

  • 使用meta\\u键查找任何条目wp_capabilitieswp_capabilities 到wp_1_capabilities
  • 我相信“1”始终是根站点的ID。

    干杯

    SO网友:Wagoner

    安装此插件:https://wordpress.org/plugins/capability-manager-enhanced/

    进入您的网站(>);能力>;设置(>);备份(>);重置角色,单击;重置为WordPress默认值;它将修复您的站点。

    其他什么都不适合我。

    结束

    相关推荐

    如何在wp-admin users.php中显示多个定制列?

    我使用manage\\u users\\u列来显示我在usermeta数据库中创建的名为company的自定义字段。我的代码如下:function mysite_column_company( $defaults ) { $defaults[\'mysite-usercolumn-company\'] = __(\'Company\', \'user-column\'); return $defaults; } function mysite_custom_col