WP_Roles::remove_cap() publicWP 2.0.0

Видаляє право (можливість) у зазначеної ролі користувача або конкретного користувача.

Змінивши право один раз, зміна залишиться назавжди, доки не буде змінено ще раз. Ці налаштування зберігаються в БД (в таблицю wp_options, поле wp_user_roles), тому цю функцію потрібно запускати один раз при активації/деактивації плагіна або теми.

Це метод класу WP_User , тому він має викликатися з екземплярів цих класів, як у прикладах.

Список прав дивіться тут .

{} Це метод класу: WP_Roles{}

Хуків немає.

Повертає

null. Нічого не вертає.

Використання

global $wp_roles;
$wp_roles->remove_cap( $role, $cap );

// або
$role = get_role( 'author' );
$role->remove_cap( $cap );
$role
(рядок) (обов’язковий)
Назва ролі: Super Admin, Administrator, Editor, Author, Contributor, Subscriber.
$cap
(рядок) (обов’язковий)
Назва можливості.
Таблиця з ролями та його правами .

Приклади

0

#1 Заборонимо читання приватних постів, користувачам у ролі editor

Функцію необхідно викликати під час активації плагіна, тобто. один раз, а не постійно:

function remove_editor_read_private_posts() {

	// get_role повертає екземпляр класу WP_Role.
	$role = get_role( 'editor' );
	$role->remove_cap( 'read_private_posts' );
}

// Теж саме можна зробити через клас WP_Roles:
function remove_editor_read_private_posts(){
	global $wp_roles;
	$wp_roles->remove_cap( 'editor', 'read_private_posts' );
}
0

#2 Видалення кількох можливостей

Видалимо деякі можливості у всіх користувачів за участю “редактор” (editor):

// Викликайте функцію один раз, при активації плагіна/теми
function wpcodex_set_capabilities() {
	// Отримуємо об'єкт ролі.
	$ editor = get_role ( 'editor');

	// Список можливостей, які потрібно видалити у editor
	$caps = array(
		'moderate_comments',
		'manage_categories',
		'manage_links',
		'edit_others_posts',
		'edit_others_pages',
		'delete_posts',
	);

	foreach ($caps as $cap) {
		$ editor-> remove_cap ( $ cap );
	}
}
0

#3 Видалимо можливість у конкретного користувача

Не можна видалити право користувача, якщо воно стосується прав його ролі! Видаляти можна права, тільки які були додані і виходять за межі його ролі. Наприклад користувачеві з правами автора, було додано право редагувати чужі пости. Якщо необхідно видалити право участі користувача, це право необхідно видаляти в самої участі. Але така зміна торкнеться всіх користувачів з цією роллю.

За умовчанням у користувачів немає прав, крім тих що йому дає його роль (ролей у користувача може бути одночасно кілька). Тому за замовчуванням у користувача неможливо видалити будь-які права.

Якщо необхідно обмежити користувача у правах і навіть не чіпати права його участі. То треба створити нову роль, передати їй всі необхідні права і встановити цю роль для користувача.

Видалимо можливість читання приватних постів у користувача з ID 5, тільки якщо таке право виходить за межі його ролі і воно було додано (делеговано) для користувача 5:

$user_id = 5;
$user = new WP_User( $user_id );
$user->remove_cap( 'read_private_posts' );

список змін

З версії 2.0.0Введено.

Код WP_Roles::remove_cap() WP 6.0.2

public function remove_cap( $role, $cap ) {
	if ( ! isset( $this->roles[ $role ] ) ) {
		return;
	}

	unset( $this->roles[ $role ]['capabilities'][ $cap ] );
	if ( $this->use_db ) {
		update_option( $this->role_key, $this->roles );
	}
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *