Программное изменение информации о роли; редактирование имени роли и удаление
Я создаю систему, в которой я делегирую много функций интерфейсной части системы с использованием Wordpress. Я перечислил все роли (большинство пользовательских), и мне нужна возможность для вошедшего в систему пользователя изменить имя роли или удалить ее.
Я не могу найти никаких обычных функций WP для этого или плагинов, которые позволяют использовать простое решение, в котором я нуждаюсь, поэтому я подумал, что мне может потребоваться выполнить запрос MYSQL, чтобы изменить информацию, но.. вы видели таблицу wp_options с информация о роли пользователя?? Это огромный беспорядок, и я действительно не хочу разрушать систему.
Есть какие-нибудь предложения?
Заранее благодарю.
3 answers
Существует целый ряд функций, специально предназначенных для этой цели;
Http://codex.wordpress.org/Function_Reference#User_and_Author_Functions
Особый интерес (но не ограничиваясь этим) представляют,
add_cap
add_role
get_role
map_meta_cap
remove_cap
remove_role
А также множество других функций, связанных с пользователями, которые позволят вам проверять/подтверждать их полномочия на основе вашего сценария использования и так далее.
Заглянув в wp-includes/capabilities.php
, мы видим, что имена ролей хранятся в массиве, поэтому что-то в этом роде,
add_action('init', 'update_role_name');
function update_role_name(){
global $wp_roles;
$wp_roles->roles['subscriber']['name'] = 'member';
$wp_roles->role_names['subscriber'] = 'member';
}
Возможно, потребуется небольшая настройка, так как это непроверено.
Изменить:
Я только что нашел это: есть-способ-переименовать-имя-роли-пользователя-без-плагина - проверьте это. Практически идентично тому, что я предлагаю, но за исключением создания экземпляра класса и проверки того, что переменная $wp_roles
действительно определена/установлена. Я предполагаю, что он работает на основании того, что он помечен правильно, но, естественно, пожалуйста, проверьте это, чтобы подтвердить.
Но аналогичным образом рассмотрим следующее, взятое непосредственно из установочного файла ядра wp-includes/capabilities.php
строка 133,
/**
* Add role name with capabilities to list.
*
* Updates the list of roles, if the role doesn't already exist.
*
* The capabilities are defined in the following format `array( 'read' => true );`
* To explicitly deny a role a capability you set the value for that capability to false.
*
* @since 2.0.0
* @access public
*
* @param string $role Role name.
* @param string $display_name Role display name.
* @param array $capabilities List of role capabilities in the above format.
* @return null|WP_Role WP_Role object if role is added, null if already exists.
*/
function add_role( $role, $display_name, $capabilities = array() ) {
if ( isset( $this->roles[$role] ) )
return;
$this->roles[$role] = array(
'name' => $display_name,
'capabilities' => $capabilities
);
if ( $this->use_db )
update_option( $this->role_key, $this->roles );
$this->role_objects[$role] = new WP_Role( $role, $capabilities );
$this->role_names[$role] = $display_name;
return $this->role_objects[$role];
}
...мы можем видеть,
Обновляет список ролей, если роль еще не существует.
add_role( $role, $display_name, $capabilities = array() )
...поэтому обновление аргумента $display_name существующей роли будет иметь тот же желаемый эффект без фактического изменения самой роли, чтобы сохранить ее пользователей, связанных с ролью.
Не работай с этим беспорядком
Откройте файл"wp-includes/capabilities.php "
Внутри есть 3 класса "WP_ROLES", "wp_role" и "WP_User"
Эти 3 класса способны легко обрабатывать все функции, связанные с ролями и возможностями пользователей
Если вы ищете плагин, вам следует попробовать Плагин для участников автор: Джастин Тэдлок. Он содержит простой и понятный менеджер ролей.
Я настоятельно рекомендую также взглянуть на код. Код Джастина действительно первоклассный, настоящий восторг по сравнению со многими другими плагинами WP.