/ Wordpress / Роли пользователей

Роли пользователей

HIT

24.03.2017

2725

Настраиваем роли пользователей сайта, разбираемся в нюансах.
Роль пользователя — набор прав и ограничений пользователя. Базовые роли WP:

  • Администратор (administrator): имеет доступ ко всем административным параметрам и настройкам внутри сайта.
  • Редактор (editor): пользователь, который имеет право публиковать, редактировать записи всех пользователей, включая собственные.
  • Автор (author): может публиковать и управлять только собственными записями.
  • Участник (contributor): автор, который может писать и управлять своими записями, но не имеет полномочий публиковать их на сайте.
  • Подписчик (subscriber): пользователь, который может только управлять своим профилем.

Есть еще роль Super Administrator, но эта роль появляется в связи с системой мультисайт.

Настройка ролей пользователей

Можно задать произвольные настройки для ролей.

Плагин User Role Editor (самый популярный)
После установки, в админке (в разделе пользователи) добавляется новый пункт меню — Редактор ролей пользователей. Здесь можно подробно настроить каждую роль.

Кнопка Сброс — сбросить роли в исходное состояние. Сброс может вызвать необратимые последствия: исчезают некоторые роли. В Woocommerce слетела система назначения категорий (помогла переустановка плагина woocommerce).

Также неплохими решениями по редактирования ролей являются 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]
  • Похожие записи
  • Комментарии
  • Вложения
Цены в зависимости от группы пользователей

Цены в зависимости от группы пользователей

Попробуем разобраться в вопросе цен для определенных групп пользователей. Либо это должно быть реализовано специальной колонкой цен, либо скидкой на все товары. WC Role Based Price Плагин WC Role Based Читать далее »

/ /

Добавить комментарий

Пока нет комментариев. Будь первым!

Роли пользователей
Хуки WordPress
Рекомендации для васХуки WordPressOpttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.