Программное изменение информации о роли; редактирование имени роли и удаление


Я создаю систему, в которой я делегирую много функций интерфейсной части системы с использованием Wordpress. Я перечислил все роли (большинство пользовательских), и мне нужна возможность для вошедшего в систему пользователя изменить имя роли или удалить ее.

Я не могу найти никаких обычных функций WP для этого или плагинов, которые позволяют использовать простое решение, в котором я нуждаюсь, поэтому я подумал, что мне может потребоваться выполнить запрос MYSQL, чтобы изменить информацию, но.. вы видели таблицу wp_options с информация о роли пользователя?? Это огромный беспорядок, и я действительно не хочу разрушать систему.

Есть какие-нибудь предложения?

Заранее благодарю.

Author: JamesG, 2012-11-02

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

 4
Author: Adam, 2017-04-13 12:37:34

Не работай с этим беспорядком

Откройте файл"wp-includes/capabilities.php "

Внутри есть 3 класса "WP_ROLES", "wp_role" и "WP_User"

Эти 3 класса способны легко обрабатывать все функции, связанные с ролями и возможностями пользователей

 1
Author: Mridul Aggarwal, 2012-11-02 12:04:17

Если вы ищете плагин, вам следует попробовать Плагин для участников автор: Джастин Тэдлок. Он содержит простой и понятный менеджер ролей.

Я настоятельно рекомендую также взглянуть на код. Код Джастина действительно первоклассный, настоящий восторг по сравнению со многими другими плагинами WP.

Role managerEdit role

 1
Author: Geert, 2012-11-02 12:13:57