WP_Roles::add_cap()
Добавляет или удаляет новую возможность указанной роли.
Изменение возможностей ролей или пользователей записывается в базу данных. Поэтому вызывать эту функцию нужно единожды, при активации/деактивации плагина или темы.
Это метод класса: WP_Roles.
Используйте WP_User::add_cap(), чтобы добавить/удалить право у отдельного пользователя.
ВАЖНО! Особенность с $grant = false.
При $grant = false вызов $roles->add_cap( 'editor', 'capname', false ) записывает в базу capname = false.
Часто лучше использовать WP_Roles::remove_cap(), потому что тогда capability удаляется полностью и записи в базе не остается.
Почему capname = false может быть проблемой:
Если у пользователя две роли, например administrator и editor, WordPress при формировании итоговых прав последовательно берет capabilities всех ролей и объединяет их.
Если:
- у
administratorестьcapname = true - у
editorзаписаноcapname = false
то в итоге пользователь может получить capname = false, потому что это значение перезапишет предыдущее при merge.
В результате право пропадет, хотя у одной из ролей оно есть.
Метод класса: WP_Roles{}
Хуков нет.
Возвращает
null. Ничего не возвращает.
Использование
// для WP $roles = new WP_Roles( $user_id ); $roles->add_cap( $role, $cap, $grant );
- $role(строка) (обязательный)
- Название роли: Super Admin, Administrator, Editor, Author, Contributor, Subscriber.
- $cap(строка) (обязательный)
- Название возможности. Таблица с ролями и их возможностями по умолчанию.
- $grant(логический)
- Может ли указанная роль пользоваться указанной возможностью. Т.е. разрешить выполнять эту возможность (true) или наоборот запретить (false).
По умолчанию: true
Примеры
#1 Добавим возможность всем пользователям с ролью "автор" (author)
Разрешим авторам редактировать и другие посты (кроме своих):
register_activation_hook( __FILE__, 'add_theme_caps' );
function add_theme_caps() {
// получим роль author. Одновременно подключимся к классу WP_Role
$role = get_role( 'author' );
// добавим новую возможность
$role->add_cap( 'edit_others_posts' );
}
Список изменений
| С версии 2.0.0 | Введена. |
Код WP_Roles::add_cap() WP Roles::add cap WP 7.0
public function add_cap( $role, $cap, $grant = true ) {
if ( ! isset( $this->roles[ $role ] ) ) {
return;
}
$this->roles[ $role ]['capabilities'][ $cap ] = $grant;
if ( $this->use_db ) {
update_option( $this->role_key, $this->roles );
}
}