geo
  • 0
Новичок

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

  • 0

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

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

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

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

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

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

Показаны роли

Share
    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 используется, когда нет многосайтовой установки, и здесь кажется, что это была просто ошибка при создании таблицы.

    • 0
  1. У меня была эта проблема с мультисайтовой установкой после переустановки WordPress и восстановления из резервной копии Updraft Plus.

    Когда я проверил user_roles запись, для параметра option_name по-прежнему был установлен исходный префикс из четырех символов, например pre1_user_roles, тогда как префикс для второй установки был чем-то вроде pre2_user_roles .

    Я обновил это, pre2_user_roles и параметры сразу же снова появились на странице параметров пользователя.

    • 0
  2. Если это проблема, которую я так хорошо знаю, вы используете установку memcache после установки MU? Я обнаружил, что, по-видимому, существует проблема с кешем (засвидетельствованная в 2.9) для объекта параметров, когда что-то хорошее (например, ключ wp_user_roles) застревает в массиве кеша памяти «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/>";
    }
    
    • 0
  3. СПАСИБО. Эта проблема представляет собой твердые 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();
      }
    
    • 0
  4. Я просто хотел сказать спасибо за эту статью, потому что я долго искал решение этой проблемы.

    Это было просто потому, что я использовал плагин для клонирования своих сайтов, и он никогда не обновлялся wp_##_user_roles должным образом. Когда сайт скопировался с wp_13... него, он был клонирован на новый сайт, wp_81... но эта запись все еще застряла на wp_13 .

    • 0
  5. Я просто хочу отметить, что у некоторых людей все еще может быть пустая таблица пользователей сайта, особенно для их корневого сайта. Если эта проблема возникает, способ ее устранения заключается в следующем:

    1. Перейти к таблице wp_usermeta
    2. Найдите любые записи с мета_ключом wp_capabilities
    3. Измените meta_key с wp_capabilities на wp_1_capabilities.

    Я считаю, что «1» всегда является идентификатором корневого сайта.

    Ваше здоровье.

    • 0
  6. Установите этот плагин: https://wordpress.org/plugins/capability-manager-enhanced/

    Перейдите на свой сайт> Возможности> Настройки> Резервное копирование> Сбросить роли, нажмите «Восстановить настройки WordPress по умолчанию», и это исправит ваш сайт.

    Ничто другое не работало для меня.

    • 0

Оставить ответ

You must login to add an answer.