WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

WP_Roles::add_cap() WP 2.0

Добавляет новую возможность указанной роли или пользователю.

Произведенное изменение возможностей ролей или пользователей записывается в БД (таблица wp_options, поле wp_user_roles) и остается навсегда, до следующего изменения. Поэтому вызывать эту функцию нужно единожды, при активации/деактивации плагина или темы.

Эта метод класса одного их классов: WP_Roles, WP_Role, WP_User.

Хуков нет.

Возвращает

Ничего не возвращает.

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

$roles = new WP_Roles( $user_id );
$roles->add_cap( $role, $cap, $grant ); 

// или 
$user = new WP_User( $user_id );
$user->add_cap( $cap, $grant );
$role (только в классе WP_Roles)(строка) (обязательный)
Название роли: Super Admin, Administrator, Editor, Author, Contributor, Subscriber.
По умолчанию: нет
$cap(строка) (обязательный)
Название возможности. Таблица с ролями и их возможностями по умолчанию.
По умолчанию: нет
$grant(логический)
Может ли указанная роль пользоваться указанной возможностью. Т.е. разрешить выполнять эту возможность (true) или наоборот запретить (false).
По умолчанию: true

Примеры

#1. Добавим возможность пользователям

с ролью "автор" (author) редактировать и другие посты, кроме своих:

function add_theme_caps() {
	// получим роль author. Одновременно подключимся к классу WP_Role
	$role = get_role( 'author' );

	 // добавим новую возможность
	$role->add_cap( 'edit_others_posts' ); 
}
add_action( 'admin_init', 'add_theme_caps');

Эти настройки сохраняются в Базу Данных, поэтому обязательно используйте хук, активации темы или плагина: register_activation_hook.

#2. Добавим новую возможность отдельному пользователю

с ID 20. Путь этот пользователь может редактировать посты 'can_edit_posts':

$user = new WP_User( 20 );
$user->add_cap( 'can_edit_posts' );

Код WP_Roles::add_cap: wp-includes/class-wp-roles.php VER 5.0.1

<?php
public function add_cap( $role, $cap, $grant = true ) {
	if ( ! isset( $this->roles[$role] ) )
		return;

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

Cвязанные функции

Из метки: Роли и возможности (role capabilities)

3 коммента
  • Кир cайт: lively.ru

    Хочу запретить авторам публиковать посты, без модерации. Правильно же я понимаю, что в functions.php нужно дописать вот это:

    function remove_author_publish_posts() {
    
      // get_role возвращает экземпляр класса WP_Role.
      $role = get_role( 'author' );
      $role->remove_cap( 'publish_posts' );
    }
    Ответить11 мес назад #
    • Kama7144

      Да правильно, только этот код нужно гдето вызывать и сделать это нужно всего один раз, т.е. не нужно при каждой генерации страницы его вызывать...

      Ответить11 мес назад #
  • Александр cайт: александрсоболев.рф

    Здравствуйте! Задался вопросом.. в WordPress возможности строго предустановленны, или я могу добавить кастомную возможность manage_my_plugindashboard(условно)

    Ответить8 дней назад #
Здравствуйте, !     Войти . Зарегистрироваться