我的网络显示的是某些站点中的角色,而不是其他站点中的角色。
由于一些我无法解释的原因,当我添加一个新用户时,我在网络子站点的下拉框中没有角色可供选择。此外,分配给某个站点的新用户未显示在该站点的用户列表中。
这是可以修复的吗?
下面是当前形势的图像。
下面的图片显示了主站点及其相应的角色,但网络的子站点没有。
我的网络显示的是某些站点中的角色,而不是其他站点中的角色。
由于一些我无法解释的原因,当我添加一个新用户时,我在网络子站点的下拉框中没有角色可供选择。此外,分配给某个站点的新用户未显示在该站点的用户列表中。
这是可以修复的吗?
下面是当前形势的图像。
下面的图片显示了主站点及其相应的角色,但网络的子站点没有。
确定您的多站点博客ID。我将以99为例进入数据库转到下表:wp_##_options
(wp\\u 99\\u选项)-您将为每个博客创建一个表,查找记录,其中option_name
= wp_user_roles
wp_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。
在重新安装WordPress并从Updraft Plus备份还原后,我在多站点安装中遇到了这个问题。
当我检查user_roles
记录时,option\\u name仍设置为原始的四个字符前缀,例如pre1_user_roles
, 而第二次安装的前缀是pre2_user_roles
.
我将此更新为pre2_user_roles
选项会立即重新出现在用户选项页面中。
如果这是我非常了解的问题,那么您在安装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/>";
}
非常感谢。此问题代表了长达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();
}
我只是想对你的这篇文章表示感谢,因为我一直在寻找解决这个问题的方法。
这仅仅是因为我使用了一个插件来克隆我的网站,而它从未更新wp_##_user_roles
正确地当站点从复制时wp_13...
它被克隆到一个新站点wp_81...
但这个条目仍然停留在wp_13
.
我只想指出,有些人可能仍然有一个专门针对其根站点的空站点用户表。如果出现此问题,解决此问题的方法是执行以下操作:
去餐桌旁wp_usermeta
干杯
安装此插件:https://wordpress.org/plugins/capability-manager-enhanced/
进入您的网站(>);能力>;设置(>);备份(>);重置角色,单击;重置为WordPress默认值;它将修复您的站点。
其他什么都不适合我。
我使用manage\\u users\\u列来显示我在usermeta数据库中创建的名为company的自定义字段。我的代码如下:function mysite_column_company( $defaults ) { $defaults[\'mysite-usercolumn-company\'] = __(\'Company\', \'user-column\'); return $defaults; } function mysite_custom_col