外観 > メニューの追加項目の制御
今作っているテーマのために久しぶりにwp-adminの中身を読んでいた。
というのも、今回はカスタム投稿タイプを利用した、ある機能のためにある項目を除去、或いは追加しなければならなかったので・・・。
とりあえず、自分なりの答えが出たので掲載。
とりあえず以下の画面の左側のところを消したり追加したりしたいと思った。
固定ページだとか、投稿とかカスタムリンクが出てるところね。
厳密に言うと仕様のため、ある投稿タイプを除外したかったわけなんだが・・・。
まぁ最初はグローバル変数の配列をunsetしてやりゃ、なんとかなると思った。
グローバル変数がwp-admin/nav-menu.phpなりwp-admin/includes/nav-menu.phpなりで出てきたら「してやったり」とか思ってた。
そして、なんやかんや調べている内に、wp_nav_menu_post_type_meta_boxes()ってやつに行き当たった。
そして、こいつを制御すればいいんかなーとか思っていたわけですが、フィルターフックができない。
まぁCodex見てたらフック可能な関数に無いわけでそりゃそうだと思いつつも、淡い期待を寄せてやってたんですが、案の定うまくいかん・・・。
そもそもなんで、関数なんや。
Class使ってやれや!!Extend効かへんやん!!!
まぁ、このとき、既にグローバル変数云々はすっかり忘れてたわけですが。
そして更に調べてようやく、答え。
A.グローバル変数$wp_meta_boxesを使う。
え?
まさかの巡り巡って最初から???
なんてこった<(^o^)>
まぁ、そりゃget_post_typesなんて使っていりゃ合点は確かに行くんだが。
なんだろう。このやるせなさ。
で、結局ウィジェットを消したりするがよろしく下記のコードをインクルードファイルに追加した。
add_action('admin_head', delete_menu_customizer); function delete_menu_customizer(){ global $wp_meta_boxes; unset($wp_meta_boxes['nav-menus']['side']['default']['add-post-type-カスタム投稿タイプ']); }
余談だが、そもそもメニューカスタマイズ画面で左側の表示に使用しているのが、wp-admin/includes/nav-menu.phpのwp_nav_menu_setup()ってやつのようだ。
function wp_nav_menu_setup() { // Register meta boxes wp_nav_menu_post_type_meta_boxes(); add_meta_box( 'add-custom-links', __( 'Custom Links' ), 'wp_nav_menu_item_link_meta_box', 'nav-menus', 'side', 'default' ); wp_nav_menu_taxonomy_meta_boxes(); // Register advanced menu items (columns) add_filter( 'manage_nav-menus_columns', 'wp_nav_menu_manage_columns' ); // If first time editing, disable advanced items by default. if ( false === get_user_option( 'managenav-menuscolumnshidden' ) ) { $user = wp_get_current_user(); update_user_option($user->ID, 'managenav-menuscolumnshidden', array( 0 => 'link-target', 1 => 'css-classes', 2 => 'xfn', 3 => 'description', 4 => 'title-attribute', ), true); } }
これを見ている限り、メニューカスタマイザーの内容って単純に固定ページ→投稿タイプ→タクソノミーが順列で表示されているだけなんだね・・・。
実際は登録・削除の際には、俺みたいな犬畜生にも劣る生まれてきてすみませんみたいなのが想像もできないコードが動いているわけなんだろうが・・・。
どこで何の処理してるかは一応わかってるつもりですが・・・・・・・・一応
ともあれ、この辺はあんまりカスタマイズは出来なさそうってのが、よく分かった気がする。