Блокировать рубрики для роли

Блокировать категории

Блокировать рубрики

Если у вас возникла необходимость заблокировать для пользователей с определенной ролью возможность привязки постов к некоторым рубрикам/категориям, используйте приведенный ниже фрагмент PHP кода. Вы можете активировать этот код, включив его в файл functions.php вашей активной темы (wp-content/themes/ваша-тема/functions.php).
Замените наименование роли ‘author’ на имя той роли, для которой вы вводите данное ограничение. Вставьте в программный код числовые идентификаторы ваших собственных рубрик для блокировки. Идентификаторы рубрик можно найти на странице “Рубрики”. Наведите курсор мыши на ссылку ‘Изменить’ блокируемой рубрики и посмотрите на появившуюся внизу, в строке состояния браузера ссылку. Видите в ней параметр ‘tag_ID=’? Число справа от него – и есть искомый идентификатор рубрики.
Мои поздравления! Вы только что, своими руками настроили блокировку набора рубрик для выбранной роли.

if (current_user_can('author')) {  // замените роль 'author' на другую по вашему выбору
  if (is_admin()) {
 
    function limit_categories_for_role($exclusions) {
 
      $cats_to_exclude = array(14, 30);  // вставьте сюда идентификаторы блокируемых категорий
      foreach ($cats_to_exclude as $cat_id) {
        $exclusions .= " AND (t.term_id<>$cat_id)";
      }
 
      return $exclusions;
    }
 
    add_filter('list_terms_exclusions', 'limit_categories_for_role');
  }
}

Если же перед вами стоит другая задача – заблокировать для пользователей с определенной ролью все рубрики за исключением нескольких, и к тому же у вас в блоге создано слишком много рубрик, или их список часто расширяется, то эффективнее будет использовать другой код. Здесь мы сначала получаем полный список рубрик автоматически, а затем удаляем из него те рубрики, доступ к которым планируем оставить.

 if (current_user_can('author')) {	// замените роль 'author' на другую по вашему выбору
	if (is_admin()) {
 
		function limit_categories_for_role($exclusions) {
 
			remove_filter('list_terms_exclusions', 'limit_categories_for_role');  // удаляем свой фильтр, чтобы избежать рекурсии при вызове get_all_category_ids()
			$cats_to_exclude = get_all_category_ids();	// список идентификаторов всех категорий
			add_filter('list_terms_exclusions', 'limit_categories_for_role');  // восстанавливаем свой фильтр
			$cats_to_save = array(21, 25); // вставьте сюда идентификаторы категорий, доступ к которым нужно сохранить
			$cats_to_exclude = array_diff($cats_to_exclude, $cats_to_save); // удаляем из общего списка идентификаторы, которые хотим оставить
			$cats_to_exclude = '('. implode( ',', $cats_to_exclude) .')'; // строим выражение WHERE для команды SQL-select 
			$exclusions = " AND (t.term_id not IN $cats_to_exclude)";
 
			return $exclusions;
		}
 
		add_filter('list_terms_exclusions', 'limit_categories_for_role');
	}
 }

Tags:

  • Спасибо, Владимир.

  • Роман

    Очень нужный хак.

    Только, похоже, в мультисайте работает не совсем корректно.

    При попытке наложить ограничение на рубрики, для одной из ролей те же ограничения распространились и на Супер Админа всей сети.

  • а можно сделать так же только с пользователями и их доступ к ID страниц?

  • WebMaster

    А как сделать так, чтобы зарегистрированный гость, например попадая в группу пользователи, мог добавлять записи только в одну рубрику, и больше ни в какие?