Метод WP_Role::add_cap()
в WordPress используется для добавления новой возможности (capability) к определённой роли. Изменение возможностей для роли сохраняется в базе данных и действует до тех пор, пока не будет явно удалено.
WP_Role::add_cap( string $cap, bool $grant = true )
Параметры:
$cap
(строка, обязательный): Название возможности, которую вы хотите добавить.$grant
(логический, необязательный): Указывает, предоставляется ли возможность (по умолчаниюtrue
). Еслиfalse
, то возможность будет запрещена.
Описание:
Метод добавляет указанную возможность (capability) для роли. Эти изменения сохраняются в базе данных (в таблице wp_options
, в поле wp_user_roles
), поэтому изменения будут действовать до тех пор, пока они явно не будут удалены, даже после деактивации темы или плагина.
Метод лучше всего использовать при активации темы или плагина, чтобы избегать дублирующих изменений возможностей при повторных вызовах.
Добавление возможности для роли автора
Пример ниже добавляет возможность для всех пользователей с ролью «автор» (author
), разрешая им редактировать чужие посты:
function add_theme_caps() {
// Получаем роль автора
$role = get_role( 'author' );
// Добавляем возможность редактировать чужие посты
$role->add_cap( 'edit_others_posts' );
}
// Выполняем функцию при инициализации админки
add_action( 'admin_init', 'add_theme_caps' );
Добавление возможности при активации темы
Часто добавление возможностей целесообразно выполнять при активации темы, чтобы изменения применялись только при установке или активации. Пример ниже показывает, как это сделать:
function add_theme_caps(){
global $pagenow;
// Проверяем, что активируется тема
if ( 'themes.php' == $pagenow && isset( $_GET['activated'] ) ) {
// Получаем роль автора
$role = get_role( 'author' );
// Добавляем возможность редактировать чужие посты
$role->add_cap( 'edit_others_posts' );
} else {
// При деактивации темы удаляем возможность
$role->remove_cap( 'edit_others_posts' );
}
}
// Выполняем функцию при загрузке страницы активации тем
add_action( 'load-themes.php', 'add_theme_caps' );
Добавление возможности для конкретного пользователя
Для добавления возможностей конкретному пользователю можно использовать класс WP_User
:
$user = new WP_User( $user_id );
$user->add_cap( 'can_edit_posts' );
Примечания:
- Один вызов — одно право: Метод
add_cap()
добавляет только одну возможность за вызов. Если требуется добавить несколько возможностей, нужно вызвать метод несколько раз:
$role->add_cap( 'edit_others_posts' );
$role->add_cap( 'upload_files' );
- Сохранение изменений: Все изменения сохраняются в базе данных и остаются актуальными даже после отключения темы или плагина, если они явно не удалены.
Пример использования в плагине
Чтобы изменения прав были применены при активации плагина, используется register_activation_hook()
:
register_activation_hook( __FILE__, 'add_plugin_caps' );
function add_plugin_caps() {
// Получаем роль автора
$role = get_role( 'author' );
// Добавляем возможность редактировать чужие посты
$role->add_cap( 'edit_others_posts' );
}
Заключение
Метод WP_Role::add_cap()
в WordPress позволяет гибко добавлять возможности для ролей, изменяя их права доступа. Эти изменения сохраняются в базе данных и остаются активными до явного удаления. Использовать его рекомендуется при активации темы или плагина для контроля над правами пользователей.