2011-09-30 10 views
5

私は、タグ分類学的サポートを備えたポートフォリオという名前のカスタムポストタイプを作成しました。Wordpress - カスタムポストタイプからサブメニューを削除

WPはポストタグとカスタムポストタイプタグの間に違いがないので、カテゴリとタグを配置するメニュー項目タクソノミを作成しました。私はメニューとサブメニューを作成し、ポストメニューからカテゴリと投稿タグを削除することもできましたが、カスタム投稿タイプメニューから投稿タグを削除することはできませんでした。

私が試した:

remove_submenu_page('edit.php?post_type=portfolio', 'edit-tags.php?taxonomy=post_tag&post_type=portfolio'); 

答えて

6

をこれは少し汚いですが、それは動作します:

add_action('admin_menu', 'remove_niggly_bits'); 
function remove_niggly_bits() { 
    global $submenu; 
    unset($submenu['edit.php?post_type=portfolio'][11]); 
} 

私はあなたが削除したいと思う正確にどのキー数はわかりません。それを見つけるための最善の方法は行うことです:あなたはその行を削除するまで、あなたが管理エリアをロードするとき

add_action('admin_menu', 'remove_niggly_bits'); 
function remove_niggly_bits() { 
    global $submenu; 
    //unset($submenu['edit.php?post_type=portfolio'][11]); 
    print_r($submenu); exit; 
} 

すべてが解除されますが、それはあなたが必要な構造とどのキーを紹介します。

+0

少し汚れています。私はremove_submenu_page()で動作することを期待していましたが、それが唯一の(動作している)回答であるため、受け入れられた答えを得ました:-) –

16

remove_submenu_page()を使うことができますが、これを行うにはスラッグを正確に行うことが最も簡単です。これは、グローバル$サブメニューをダンプしてmenu_slugとsubmenu_slugを確認することです。

global $submenu; 
var_dump($submenu); 

これはあなたのメニューのアレイを与える、トップレベルの鍵はmenu_slugであり、正しいsubmenu_slugは、ネストされた配列の要素2に見出すことができます。私は「my_events」というカスタムポストタイプを持っていたし、私はそれから、タグのメニューを削除したい場合

だから、私のオリジナルのメニュー構造は、あなたがmenu_slugていることがわかります。このことから、この

... 
'edit.php?post_type=my_events' => 
    array 
     5 => 
     array 
      0 => string 'All Events' (length=10) 
      1 => string 'edit_posts' (length=10) 
      2 => string 'edit.php?post_type=my_events' (length=28) 
     10 => 
     array 
      0 => string 'Add New' (length=7) 
      1 => string 'edit_posts' (length=10) 
      2 => string 'post-new.php?post_type=my_events' (length=32) 
     15 => 
     array 
      0 => string 'Tags' (length=4) 
      1 => string 'manage_categories' (length=17) 
      2 => string 'edit-tags.php?taxonomy=post_tag&post_type=my_events' (length=55) 
... 

ようになります。 'edit.php?post_type=my_events'であり、タグメニューのサブメニューslugは'edit-tags.php?taxonomy=post_tag&post_type=my_events'です。

だから、remove関数呼び出しは次のようになります。

remove_submenu_page('edit.php?post_type=my_events', 'edit-tags.php?taxonomy=post_tag&post_type=my_events'); 

注サブメニュースラグは、アンパサンドが今&あるので、エンコードされたHTMLであること - これはおそらく、それが難しい人々から出て作業するために作られたもののことです最初の原則はスラグの名前がす​​べきものです。

+0

+1、それは動作します。 @ IlesPeter、これは受け入れられた答えでなければなりません。 – Sparky

+0

+1が動作することを確認しました。別の場所で報告されているように、この関数は両方の引数を有効にすることに非常に敏感です。それを正しいものにするためには、さまざまな調整が必要です。 –

+0

+1素晴らしい!ありがとう@ benz001 正解でなければなりません。 – user2655393

0

'show_ui' => falseを使用するほうがよい場合があります。

function car_brand_init() { 
    // new taxonomy named merk 
    register_taxonomy(
     'merk', 
     'lease_fop', 
     array(
      'label' => __('Merken'), 
      'rewrite' => array('slug' => 'merken'), 
      'update_count_callback' => '_update_post_term_count', 
      // use this to hide from menu 
      'show_ui' => false, 
      'capabilities' => array(
       'assign_terms' => 'edit_guides', 
       'edit_terms' => 'publish_guides' 
      ) 
     ) 
    ); 
} 
add_action('init', 'car_brand_init'); 
+0

しかし、これはまた、メタボックスを無効にします。メニューからタクソノミを非表示にしたい場合は、@ benz001ソリューションが最適です。 –

関連する問題