Настраиваем роли пользователей сайта, разбираемся в нюансах.
Роль пользователя — набор прав и ограничений пользователя. Базовые роли WP:
- Администратор (administrator): имеет доступ ко всем административным параметрам и настройкам внутри сайта.
- Редактор (editor): пользователь, который имеет право публиковать, редактировать записи всех пользователей, включая собственные.
- Автор (author): может публиковать и управлять только собственными записями.
- Участник (contributor): автор, который может писать и управлять своими записями, но не имеет полномочий публиковать их на сайте.
- Подписчик (subscriber): пользователь, который может только управлять своим профилем.
Есть еще роль Super Administrator, но эта роль появляется в связи с системой мультисайт.
Настройка ролей пользователей
Можно задать произвольные настройки для ролей.
Плагин User Role Editor (самый популярный)
После установки, в админке (в разделе пользователи) добавляется новый пункт меню — Редактор ролей пользователей. Здесь можно подробно настроить каждую роль.
Также неплохими решениями по редактирования ролей являются WPFront User Role Editor и Role Scoper.
Создание пользовательской роли
Добавляем на сайт, новую пользовательскую роль — Client, и прописываем ей права и ограничения. Данный код помещаем в файл функций, после этого новая роль появится в выборе при создании нового пользователя.
// Add a custom user role
$result = add_role( 'client', __('Client'),
array(
'read' => false, // true allows this capability
'edit_posts' => false, // Allows user to edit their own posts
'edit_pages' => false, // Allows user to edit pages
'edit_others_posts' => false, // Allows user to edit others posts not just their own
'create_posts' => false, // Allows user to create new posts
'manage_categories' => false, // Allows user to manage post categories
'publish_posts' => false, // Allows the user to publish, otherwise posts stays in draft mode
'edit_themes' => false, // false denies this capability. User can’t edit your theme
'install_plugins' => false, // User cant add new plugins
'update_plugin' => false, // User can’t update any plugins
'update_core' => false // user cant perform core updates
)
);
Отключить верхнюю панель редактирования (во фронтенде):
function admin_bar(){
if(is_user_logged_in()){
add_filter( 'show_admin_bar', '__return_false' , 1000 );
}
}
add_action('init', 'admin_bar' );
Удаление стандартных ролей
// Удаляем стандартные роли
function wps_remove_role() {
remove_role( 'editor' ); //редактор
//remove_role( 'author' ); //автор
remove_role( 'contributor' ); //участник
remove_role( 'subscriber' ); //подписчик
}
add_action( 'init', 'wps_remove_role' );
Чтобы восстановить стандартные роли нужно (однократно) запустить следующую функцию:
// Восстановить роли по умолчанию
if ( !function_exists( 'populate_roles' ) ) {
require_once( ABSPATH . 'wp-admin/includes/schema.php' );
}
populate_roles();
Роль нового пользователя
Роль нового пользователя (при разрешенной регистрации) по-умолчанию настраивается здесь:
Настройки > Общие > Роль нового пользователя
Если посетитель сайта не зарегистрирован то у него нет ни какой роли.
Данные о текущем пользователе
Если известен идентификатор пользователя:
$user = new WP_User( $user_id );
if ( !empty( $user->roles ) && is_array( $user->roles ) ) {
foreach ( $user->roles as $role )
echo $role;
}
Если не известен идентификатор пользователя:
function get_user_role() {
global $current_user;
$user_roles = $current_user->roles;
$user_role = array_shift($user_roles);
return $user_role;
}
В шаблоне выводить командой get_user_role();
Показывать пользователю только его записи и медиафайлы
// Показывать автору только собственные записи
function posts_for_current_author($query) {
global $pagenow;
if( 'edit.php' != $pagenow || !$query->is_admin )
return $query;
if( !current_user_can( 'manage_options' ) ) {
global $user_ID;
$query->set('author', $user_ID );
}
return $query;
}
add_filter('pre_get_posts', 'posts_for_current_author');
// Показывать автору только собственные медиафайлы
add_action('pre_get_posts','users_own_attachments');
function users_own_attachments( $wp_query_obj ) {
global $current_user, $pagenow;
$is_attachment_request = ($wp_query_obj->get('post_type')=='attachment');
if( !$is_attachment_request )
return;
if( !is_a( $current_user, 'WP_User') )
return;
if( !in_array( $pagenow, array( 'upload.php', 'admin-ajax.php' ) ) )
return;
if( !current_user_can('delete_pages') )
$wp_query_obj->set('author', $current_user->ID );
return;
}
Массовое изменение ролей
Пробовал плагин Bulk Edit and Create User Profiles – WP Sheet Editor (70+). Работает неправильно — не выводит таблицу с пользователями, хотя возможно я не разобрался в нем.
Еще один бесполезный плагин Bulk User Management (50+). Вроде принцип действия прост: делает выгрузку в CSV, редактируем файл и загружаем обратно, но на деле существующие роли не обновляет, кроме администраторской (даже если ее нет в выгрузке).
Import and export users and customers (50000) тоже непонятный плагин, при импорте нет никаких инструкций по структуре импортируемого файла и как следствие импортирует непонятно что. Возможно он подойдет для целей именно обновления текущих пользователей, т.е. работая с изначально созданным экспортом.
Import Export WordPress Users and WooCommerce Customers (50000) работает хорошо. Но принцип все же: сначала нужно экспортировать то что есть и потом заполнив поля новыми пользователями сделать импорт. Есть настройка пропускать существующих пользователей.
[site-socialshare]