如何在编辑/添加新帖子屏幕中向贡献者隐藏类别?

时间:2011-01-31 作者:davemac

我有一种情况,我需要隐藏一个特定的类别,它是作为贡献者登录的用户的子类别。我不想让他们在“添加新帖子”屏幕的“类别”元框中看到这个类别及其子类别。

我找不到一个插件(可以运行)来实现这一点,我想知道是否有其他人知道这个插件,或者是否有更好的功能可以用来实现这一点?

4 个回复
最合适的回答,由SO网友:Khadka Pushpendra 整理而成

Working Example in Oct 2020, 工作答案,我去了不同的答案,没有一个在新的WordPress中有效。

function hide_categories_for_specific_user( $exclusions, $args ){

if ( ((defined( \'REST_REQUEST\' ) && REST_REQUEST) or $GLOBALS[\'pagenow\'] === \'edit.php\' ) && !current_user_can( \'manage_options\' ) ) {

   // IDs of terms to be excluded
   $exclude_array = array("12","16","17"); // 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) . \' \';
       else
               $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 );
回答来自的最终帮助Hide Some Categories in Post Editor

SO网友:MikeSchinkel

你好@davemac:

嗯,在看到你回答自己的问题之前,我写了这篇文章,所以我还是把它贴出来:

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;
}
此代码假定您使用了Members plugin 创建capability 调用\'see_special_cats\' 并且您已经将其分配给了您想要访问类别的每个角色,当然除了\'Contributors\'.

既然你找到了插件,你可能不需要它,但它可能会帮助其他人。

SO网友:Nandish Sandhu

如果您想对贡献者隐藏类别,但只有管理员可以看到该类别,请更改\'see_special_cats\'\'manage_options\' 我已经测试过了,效果不错,希望能有所帮助。谢谢!:)

SO网友:Shamseer Ahammed

在网上搜索了很多之后,我找到了一个解决方案,您可以将想要隐藏的类别的ID作为数组传入,然后将其粘贴到函数中。php文件。将为管理员显示所有类别

$exclude\\u 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) . \' \';
           else
                   $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 );

结束

相关推荐

WordPress删除wp_List_Categories中最后一项的分隔符

我正在尝试删除最后一个分隔符(通常是<br/> 标记,但我将其从wp\\u list\\u categories的最后一个链接更改为“/”)。基本上我想要这个:类别1//类别2//类别3//看起来像这样:类别1//类别2//类别3以下是我当前使用的代码:<?php $cat_array = array(); $args = array( \'author\' => get_the_author_meta(\'id\'),&#x