I have a situation where I need to hide a specific category and it's children from users who are logged in as Contributors. I don't want them to see this category and it's children in the categories meta-box on the add new post screen.

I can't find a plugin (that works) to do this, wondering if someone else knows of one, or even better if there is a function I can use to do this?

| improve this question | | | | |
  • Looks like I have answered my own question, I found a plugin called Restrict Categories that does exactly this. – davemac Jan 31 '11 at 14:13
  • First question, are you using any kind of plugin that easily let's you add "capabilities" to user "roles", such as the Members plugin? – MikeSchinkel Jan 31 '11 at 14:13

Hi @davemac:

Well, I wrote this before I saw that you answered your own question so I might as well post it anyway:

add_filter('list_terms_exclusions', 'yoursite_list_terms_exclusions', 10, 2);
function yoursite_list_terms_exclusions( $exclusions, $args ) {
  global $pagenow;
  if (in_array($pagenow,array('post.php','post-new.php')) && 
     !current_user_can('see_special_cats')) {
    $exclusions = " {$exclusions} AND t.slug NOT IN ('slug-one','slug-two')";
  return $exclusions;

This code presumes that you've used a plugin like the Members plugin to create a capability called 'see_special_cats' and that you've assigned it to every role that you want to have access to the categories except of course 'Contributors'.

Since you found the plugin you may not need this, but maybe it will help someone else.

| improve this answer | | | | |
  • Thanks Mike, that is actually VERY helpful and opens up a lot of possibilities for me. – davemac Jan 31 '11 at 14:40
  • @davemac - Glad I could help. – MikeSchinkel Jan 31 '11 at 14:43
  • @MikeSchinkel I know its old post but still, I was looking for the same solution. I want to hide one category from contributor role. So I used your code and it hide category even from admin! How can I hide category from contributor only and admin can see that category? – Rishabh Aug 3 '16 at 12:18

if you want hide category from contributor but only admin can see that category then change 'see_special_cats' to 'manage_options' I've tested and it works hope it helps. Thanks! :)

| improve this answer | | | | |
  • The question is: How to change. – kaiser Sep 6 '16 at 20:18

After searching a lot over the web I found a solution, you can pass in the ids of categories you want to hide as an array, and then paste this in your functions.php file. All categories will be shown for administrators

$exclude_array = array("5","6","7","1");

function hide_categories_for_specific_user( $exclusions, $args ){

if (!current_user_can('manage_options') ) {

   // IDs of terms to be excluded
   $exclude_array = array("5","6","7","1"); // CHANGE THIS TO IDs OF YOUR TERMS

   // Generation of exclusion SQL code
   $exterms = wp_parse_id_list( $exclude_array );
   foreach ( $exterms as $exterm ) {
           if ( empty($exclusions) )
                   $exclusions = ' AND ( t.term_id <> ' . intval($exterm) . ' ';
                   $exclusions .= ' AND t.term_id <> ' . intval($exterm) . ' ';

   // Closing bracket
   if ( !empty($exclusions) )
       $exclusions .= ')';

   // Return our SQL statement
   return $exclusions;


 // Finally hook up our filter
 add_filter( 'list_terms_exclusions', 'hide_categories_for_specific_user', 10, 2 );
| improve this answer | | | | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.