%e3%80%90wordpress%e3%80%91%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%a0%e6%8a%95%e7%a8%bf%e3%82%bf%e3%82%a4%e3%83%97%e3%81%ae%e3%82%ab%e3%83%86%e3%82%b4%e3%83%aa%e3%83%bc%e9%96%a2%e9%80%a3%e3%81%ae%e8%a8%ad

【wordpress】カスタム投稿タイプのカテゴリー関連の設定

複数のカスタム投稿タイプを使用した時に、あるカスタム投稿のみカテゴリーの設定を切り替えてほしいというご依頼を受けました。
例えば、「ブログ」や「お知らせ」はお客様で自由にカテゴリーの追加をできるようにして、「○○紹介」みたいなものはカテゴリーを固定にして追加できないようにしたいというもの。

当初、カスタム投稿タイプではなく、固定ページで切り分けて更新できるようにしていたのですが、ユーザー権限で更新したい部分以外はすべて非表示にしたいというお申し出により、このような対応をすることになりました。
ネットで調べてもなかなか出てこなかったので、まとめてみたいと思います。

特定のカスタム投稿タイプの編集画面で「新規カテゴリーの追加」を非表示にする

2行目は「管理者権限以外」に指定するというもの。管理者権限でのログインまで非表示にすると困るので、このように設定しています。
7行目の「#category-tabs, #category-adder {display:none;}」は、カテゴリーの「よく使うもの」タブを非表示にするというもの。
このタグはすべての編集画面で非表示にする設定になるので、不要であれば、7行目は削除してください。
8行目で特定のカスタムタクソノミーのみを指定しています。

function hide_category_tabs_adder() {
    if (!current_user_can('administrator')) {
	global $pagenow;
	global $post_type;
	if (is_admin() && ($pagenow=='post-new.php' || $pagenow=='post.php')){
		echo '<style type="text/css">
		#category-tabs, #category-adder {display:none;}
		#カスタムタクソノミー名-tabs, #カスタムタクソノミー名-adder {display:none;}
		
		.categorydiv .tabs-panel {padding: 0 !important; background: none; border: none !important;}
		</style>';
	}
    }
}
add_action( 'admin_head', 'hide_category_tabs_adder' );

参考:http://www.nxworld.net/wordpress/wp-hide-category-tabs-and-adder.html

左のメニューバーから特定のカスタム投稿タイプのカテゴリー一覧を非表示にする

2行目は「管理者権限以外」に指定するというもの。管理者権限でのログインまで非表示にすると困るので、このように設定しています。
このコードの詳しい説明は、LIG様のブログに書かれています。

add_action( 'admin_menu', 'remove_customer_submenu_page' );
function remove_customer_submenu_page(){
  if (!current_user_can('administrator')) {
     remove_submenu_page( 'edit.php?post_type=カスタム投稿タイプ名', "edit-tags.php?taxonomy=カスタムタクソノミー名&amp;post_type=カスタム投稿タイプ名");
  }
}

参考:http://liginc.co.jp/web/wp/customize/29851

記事編集画面のカテゴリー選択を1つだけにする(チェックボックスに変更する)

カテゴリー選択を1つだけにするなんてできるんだろうかと思って調べてみると、対応している人発見!
やっぱり一定の需要があるんですね。
これは権限で分けずに、すべてのアカウントで変更させています。

function my_print_footer_scripts() {
echo '<script type="text/javascript">
  //<![CDATA[
  jQuery(document).ready(function($){
    $(".categorychecklist input[type=\"checkbox\"]").each(function(){
      $check = $(this);
      var checked = $check.attr("checked") ? \' checked="checked"\' : \'\';
      $(\'<input type="radio" id="\' + $check.attr("id")
        + \'" name="\' + $check.attr("name") + \'"\'
    + checked
  + \' value="\' + $check.val()
  + \'"/>\'
      ).insertBefore($check);
      $check.remove();
    });
  });
  //]]>
  </script>';
}
add_action('admin_print_footer_scripts', 'my_print_footer_scripts', 21);

参考:http://webimemo.com/wordpress/8043