Где определены доступные роли в базе данных wp_?
Я попал в список тестировщиков закрытой беты плагина, который использую в мультисайтовой сети.
Авторы плагина добавили в код создание пользовательской роли. У них есть ошибка, которая удаляет возможность назначать пользователям любые роли, кроме их одной пользовательской роли.
Когда я захожу на страницу ../wp-admin/network/site-users.php, выпадающие списки "Добавить пользователя" показывают только одну роль, добавленную этим плагином. Выпадающее меню изменения роли показывает все стандартные роли WordPress, плюс несколько дополнительных ролей, добавленных этим и другими плагинами. Если я пытаюсь изменить роль пользователя на одну из этих ролей, я получаю страницу с ошибкой "Вы не можете назначать пользователям эту роль".
Я обсуждал это с разработчиком, и они, похоже, в недоумении.
Я просмотрел базу данных и кодекс, но не могу найти, где определены допустимые роли.
Обратите внимание, что option_name может содержать префикс вашей базы данных вместо wp_. В моей базе данных было именно так.
Eric K
Также может содержать ID блога, если вы используете мультисайт, например "wp_37_user_roles".
Matt Raines
Роли пользователей хранятся в таблице wp_user_meta
Чтобы проверить роли пользователей, сначала найдите ID пользователя в таблице wp_users (название столбца — ID)
Теперь перейдите в таблицу wp_usermeta и выполните поиск, где столбец user_id равен ID, соответствующему ID из таблицы wp_users.
Вы получите список строк с метаданными выбранного пользователя. Строка с meta_key равным wp_capabilities определяет роль пользователя.
Значение wp_capabilities для:
- Администратор:
a:1:{s:13:"administrator";b:1;} - Покупатель WooCommerce:
a:1:{s:8:"customer";b:1;}
Ваш ответ касается назначения роли пользователю. Автор вопроса спрашивал о самих определениях ролей, которые хранятся в wp_options.
Brett Donald
что a:1:{s:13:"administrator";b:1;} выглядит как неаккуратная строка, что значат все эти цифры вокруг основного содержания?
Johnny Rockex
@Johnny Rockex Это сериализованные данные - способ хранения нескольких значений в одной ячейке базы данных... часто это считается не лучшей практикой, так как может усложнить работу. "s" означает "string" (строка из 13 символов), "b" - Boolean (логическое значение) - погуглите "Data Serialisation in MySQL" для подробностей.
mayersdesign
@mayersdesign Я понимаю ваше недовольство, интуитивно мне тоже хотелось бы переструктурировать таблицы, чтобы в каждом поле было одно значение, но кто знает — это работает.
Johnny Rockex