Где определены доступные роли в базе данных wp_?
Я попал в список тестировщиков закрытой беты плагина, который использую в мультисайтовой сети.
Авторы плагина добавили в код создание пользовательской роли. У них есть ошибка, которая удаляет возможность назначать пользователям любые роли, кроме их одной пользовательской роли.
Когда я захожу на страницу ../wp-admin/network/site-users.php
, выпадающие списки "Добавить пользователя" показывают только одну роль, добавленную этим плагином. Выпадающее меню изменения роли показывает все стандартные роли WordPress, плюс несколько дополнительных ролей, добавленных этим и другими плагинами. Если я пытаюсь изменить роль пользователя на одну из этих ролей, я получаю страницу с ошибкой "Вы не можете назначать пользователям эту роль".
Я обсуждал это с разработчиком, и они, похоже, в недоумении.
Я просмотрел базу данных и кодекс, но не могу найти, где определены допустимые роли.

Обратите внимание, что option_name
может содержать префикс вашей базы данных вместо wp_
. В моей базе данных было именно так.

Также может содержать ID блога, если вы используете мультисайт, например "wp_37_user_roles".

Роли пользователей хранятся в таблице 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.

что a:1:{s:13:"administrator";b:1;} выглядит как неаккуратная строка, что значат все эти цифры вокруг основного содержания?

@Johnny Rockex Это сериализованные данные - способ хранения нескольких значений в одной ячейке базы данных... часто это считается не лучшей практикой, так как может усложнить работу. "s" означает "string" (строка из 13 символов), "b" - Boolean (логическое значение) - погуглите "Data Serialisation in MySQL" для подробностей.

@mayersdesign Я понимаю ваше недовольство, интуитивно мне тоже хотелось бы переструктурировать таблицы, чтобы в каждом поле было одно значение, но кто знает — это работает.
