Почему мои роли не видны в мультисайте / сети?

16

Моя сеть показывает роли на некоторых сайтах, а не на других.

По какой-то причине, которую я не могу объяснить, когда я добавляю нового пользователя, у меня нет ролей для выбора в раскрывающемся списке подузла в моей сети. Кроме того, мой новый пользователь, назначенный сайту, не отображается в моем списке пользователей для этого сайта.

Это что-то поправимо?

Ниже изображение текущей ситуации.

Роли не отображаются

Ниже приведена картинка, показывающая основной сайт с должным образом ролями, а подсайты сети - нет.

Роли, показывающие

Geo
источник

Ответы:

29
  1. Определите свой идентификатор блога для нескольких сайтов. Я буду использовать 99 в качестве примера
  2. Зайти в базу данных
  3. Перейти к этой таблице: wp_##_options(wp_99_options) - у вас будет таблица для каждого блога
  4. Найти запись где option_name=wp_user_roles
  5. Изменить текст 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 используется, когда нет установки Multisite, и здесь кажется, что это была просто ошибка при создании таблицы.

Нэшвилл Дизайн сайта
источник
Спасибо! Спасательный совет здесь. Это точно правильный ответ.
ZaMoose
1
У меня НЕТ "wp_user_roles" в моей таблице, я копировал содержимое wp_4_options> wp_user_roles (большой объект json или сериализованный массив, я знаю) в новую запись с именем wp_5_options (это был блог, в котором отсутствовали роли), и это исправил мою проблему. Тем не менее, проголосовал +1, потому что это поставило меня на правильный путь
Xananax
Я также решил УДАЛИТЬ запись "wp _ ## _ user_roles" из основной таблицы wp_options, потому что она, кажется, переопределяет одну из опций wp _ ## _.
Паоло
1
Блестящий ответ!
jnthnclrk
7
Для людей, которые перенесли ваш сайт и изменили префиксы, ошибка может быть «wp _ ## _ user_roles» вместо «{new_prefix} _ ## _ user_roles»
Xhynk
2

Если это проблема, которую я так хорошо знаю, вы запускаете установку memcache после установки MU? Я обнаружил, что, очевидно, существует проблема с кешем (засвидетельствовано в 2.9) для объекта параметров, когда что-то хорошее (например, ключ wp_user_roles) застревает в массиве memcache «notoptions».

Если вы запускаете поверх memcache, и это звучит как возможность, попробуйте подключиться к машине через 11211. Введите delete blogid:options:notoptions, где blogid - это идентификатор блога, в котором вы видите проблему. Обновите панель администратора и посмотрите, есть ли роли в выпадающем списке. Если так, то вы нашли свою проблему.

ОБНОВЛЕНИЕ : ОК, так что вы не нашли свою проблему - вы не запустили memcache. Я все еще проверял бы объект ролей, ища поврежденный или несуществующий. Я верю, что это твое лучшее лидерство. Вы можете использовать этот код для вывода таблицы параметров:

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/>";
}
редактор
источник
Редактор. Я не знаю, как memcache попал на мой сервер. Я не использую это вообще. Может потому что я установил кеш w3. Я попытался удалить, он дал мне сообщение, говорящее not_found. Я пошел дальше и отключил memcache, так как я не использую его. У меня все еще есть проблема.
Geo
Извините, это не решило вашу проблему. Я часто сталкиваюсь с этим, так что это было мое лучшее предположение. Я бы продолжал искать объект ролей для этого блога. Это существует? Обновил мой ответ выше в надежде, что это поможет.
редактор
1

У меня была эта проблема с установкой Multisite после переустановки 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» - это всегда идентификатор корневого сайта.

Приветствия.

jamilj
источник
wp_Приставка устанавливается Синд wp-config.phpи только по умолчанию в wp_. 1Действительно есть корень сайта. Но это не обязательно, так 1как это уникальный и увеличивающийся идентификатор, который генерируется автоматически.
Кайзер