wp_ensure_editable_role()WP 6.8.0

Проверяет, может ли текущий пользователь назначить указанную роль другому пользователю.

Функция получает название роли и сверяет его со списком ролей, доступных текущему пользователю для редактирования. Если роль нельзя назначить, выполнение скрипта сразу останавливается через wp_die() и показывается сообщение об ошибке.

Функция не проверяет существование роли напрямую. Она проверяет роль именно среди ролей, которые текущему пользователю разрешено редактировать. Поэтому роль может существовать в WordPress, но всё равно быть недоступной для назначения.

Функция находится в файле wp-admin/includes/ms.php, поэтому обычно используется в админке.

Работает на основе: get_editable_roles()

Хуков нет.

Возвращает

null.

  • void — ничего не возвращает, если роль можно назначить.
  • void — если роль нельзя назначить, завершает выполнение через wp_die().

Использование

wp_ensure_editable_role( $role );
$role(string) (обязательный)

Название роли, которую пользователь пытается назначить.

Например: subscriber, editor, administrator.

Примеры

0

#1 Проверка роли перед назначением пользователю

Перед обновлением роли можно проверить, разрешено ли текущему пользователю назначать такую роль.

$role = 'editor';

wp_ensure_editable_role( $role );

$user_id = 25;
$user    = new WP_User( $user_id );

$user->set_role( $role );

Если текущий пользователь не может назначить роль editor, выполнение будет остановлено.

0

#2 Проверка роли из данных формы

Пример показывает, как проверить роль, переданную из формы в админке.

if ( isset( $_POST['role'] ) ) {
	$role = sanitize_key( $_POST['role'] );

	wp_ensure_editable_role( $role );

	$user_id = 25;
	$user    = new WP_User( $user_id );

	$user->set_role( $role );
}

Список изменений

С версии 6.8.0 Введена.

Код wp_ensure_editable_role() WP 6.9.4

function wp_ensure_editable_role( $role ) {
	$roles = get_editable_roles();
	if ( ! isset( $roles[ $role ] ) ) {
		wp_die( __( 'Sorry, you are not allowed to give users that role.' ), 403 );
	}
}