Функция get_role()
в WordPress позволяет получить объект роли пользователя, чтобы управлять его возможностями (capabilities). Это полезный инструмент для работы с пользовательскими правами и создания кастомных ролей с уникальными правами.
get_role( string $role ): WP_Role|null
Основные параметры функции:
$role
(string) — Название роли (например,administrator
,editor
,author
и т.д.), объект которой нужно получить.
Возвращаемое значение:
WP_Role|null
— Возвращает объект классаWP_Role
, если роль существует, илиnull
, если указанная роль не найдена.
Пример 1: Получение возможностей роли администратора
В следующем примере мы получим массив с возможностями роли администратора:
$admin_role = get_role( 'administrator' );
if ( $admin_role ) {
print_r( $admin_role->capabilities );
} else {
echo 'Роль администратора не найдена';
}
Этот код выведет все возможности, которыми обладает роль администратора:
Array
(
[switch_themes] => 1
[edit_themes] => 1
[activate_plugins] => 1
[edit_plugins] => 1
[edit_users] => 1
// Другие возможности...
)
Пример 2: Проверка возможности для определённой роли
Иногда требуется проверить, обладает ли конкретная роль определённой возможностью. Например, нужно убедиться, что роль автора может редактировать посты:
$author_role = get_role( 'author' );
if ( isset( $author_role->capabilities['edit_posts'] ) && $author_role->capabilities['edit_posts'] ) {
echo 'Роль автора может редактировать посты';
} else {
echo 'Роль автора не имеет прав на редактирование постов';
}
Пример 3: Добавление новой возможности для роли
Функция get_role()
также может быть использована для модификации прав существующих ролей. Например, добавим возможность редактирования чужих записей для роли автора:
add_action( 'admin_init', 'add_custom_capability_to_author' );
function add_custom_capability_to_author() {
$author_role = get_role( 'author' );
if ( $author_role ) {
$author_role->add_cap( 'edit_others_posts' );
}
}
Теперь роль «Автор» сможет редактировать записи, созданные другими пользователями.
Пример 4: Удаление возможности у роли
Также с помощью метода remove_cap()
можно удалить конкретную возможность у роли. Например, уберём у редактора право удалять записи:
add_action( 'admin_init', 'remove_delete_posts_cap_from_editor' );
function remove_delete_posts_cap_from_editor() {
$editor_role = get_role( 'editor' );
if ( $editor_role ) {
$editor_role->remove_cap( 'delete_posts' );
}
}
Этот код отключает возможность удаления постов для роли редактора.
Пример 5: Получение информации о роли Администратор
Функция get_role()
может быть использована для получения информации о любой роли. Рассмотрим пример с ролью «Администратор»:
$role = get_role( 'administrator' );
print_r($role);
Этот код выведет структуру роли:
Array
(
[switch_themes] => 1
[edit_themes] => 1
[activate_plugins] => 1
[edit_plugins] => 1
[edit_users] => 1
[edit_files] => 1
[manage_options] => 1
[moderate_comments] => 1
[manage_categories] => 1
[manage_links] => 1
[upload_files] => 1
[import] => 1
[unfiltered_html] => 1
[edit_posts] => 1
[edit_others_posts] => 1
[edit_published_posts] => 1
[publish_posts] => 1
[edit_pages] => 1
[read] => 1
[level_10] => 1
[level_9] => 1
[level_8] => 1
[level_7] => 1
[level_6] => 1
[level_5] => 1
[level_4] => 1
[level_3] => 1
[level_2] => 1
[level_1] => 1
[level_0] => 1
[edit_others_pages] => 1
[edit_published_pages] => 1
[publish_pages] => 1
[delete_pages] => 1
[delete_others_pages] => 1
[delete_published_pages] => 1
[delete_posts] => 1
[delete_others_posts] => 1
[delete_published_posts] => 1
[delete_private_posts] => 1
[edit_private_posts] => 1
[read_private_posts] => 1
[delete_private_pages] => 1
[edit_private_pages] => 1
[read_private_pages] => 1
[delete_users] => 1
[create_users] => 1
[unfiltered_upload] => 1
[edit_dashboard] => 1
[update_plugins] => 1
[delete_plugins] => 1
[install_plugins] => 1
[update_themes] => 1
[install_themes] => 1
[update_core] => 1
[list_users] => 1
[remove_users] => 1
[promote_users] => 1
[edit_theme_options] => 1
[delete_themes] => 1
[export] => 1
[list_roles] => 1
[create_roles] => 1
[edit_roles] => 1
[delete_roles] => 1
[edit_role_menus] => 1
[edit_posts_role_permissions] => 1
[edit_pages_role_permissions] => 1
[edit_nav_menu_permissions] => 1
[edit_content_shortcodes] => 1
[delete_content_shortcodes] => 1
[edit_login_redirects] => 1
[delete_login_redirects] => 1
[bulk_edit_roles] => 1
[edit_widget_permissions] => 1
[edit_attachments] => 1
[delete_attachments] => 1
[read_others_attachments] => 1
[edit_others_attachments] => 1
[delete_others_attachments] => 1
[edit_users_higher_level] => 1
[delete_users_higher_level] => 1
[promote_users_higher_level] => 1
[promote_users_to_higher_level] => 1
[manage_capabilities] => 1
)
Пример 6: Условный вывод интерфейса на основе ролей
Допустим, нужно ограничить доступ к определённой функции сайта только для пользователей с ролью администратора. Это можно сделать с использованием get_role()
:
$current_user_role = wp_get_current_user()->roles[0]; // Получаем текущую роль пользователя
if ( $current_user_role === 'administrator' ) {
echo 'Вы администратор и можете управлять сайтом';
} else {
echo 'У вас нет прав для управления сайтом';
}
Заключение
Функция get_role()
— это мощный инструмент для работы с ролями в WordPress. Она позволяет получать информацию о ролях, изменять возможности, а также настраивать доступ к функционалу на основе прав пользователей.