メニュー項目を削除しようとしていますが、いくつかの方法を試しましたが、まだうまくいっていません。これはFAQプラグインから作成されました。
私がこの行を使うならば:
remove_menu_page( 'edit.php?post_type=question' );
それはメインメニューを削除します、しかし私はそのedit.php?post_type=question
URLアドレスの中に含まれている2つのサブメニューアイテムを削除したいだけです。
削除したいアイテムについては、URLバーのパスから次のように表示されます。edit-tags.php?taxonomy=faq-topic&post_type=question
そしてedit-tags.php?taxonomy=faq-tags&post_type=question
私はremove_menu_page
とremove_submenu_page
を含むいくつかの解決策を試してみましたが無駄でした。
これまでに失敗したもの:
remove_submenu_page( 'edit.php?post_type=question', 'edit-tags.php?taxonomy=faq-topic&post_type=question');
remove_menu_page( 'edit-tags.php?taxonomy=faq-tags') ;
remove_menu_page( 'edit-tags.php?taxonomy=faq-tags&post_type=question') ;
remove_submenu_page( 'edit.php?post_type=question', 'edit-tags.php?taxonomy=faq-topic&post_type=question');
remove_submenu_page( 'edit.php', 'edit-tags.php?taxonomy=faq-topic&post_type=question');
remove_submenu_page( 'edit.php', 'edit-tags.php?taxonomy=faq-topic');
remove_submenu_page( 'edit.php', 'edit-tags.php');
function remove_submenu() {
remove_submenu_page( 'edit.php', 'edit-tags.php?taxonomy=faq-topic&post_type=question' );
remove_submenu_page( 'edit.php', 'edit-tags.php?taxonomy=faq-tags&post_type=question' );
}
add_action( 'admin_menu', 'remove_submenu', 999 );
コーデックス を読んでください。 remove_submenu_page()
には2つのパラメータと正しいフックが必要です。
そしてvery important:あなたのフックにはとても、とても、とても高い優先順位を使ってください!低い優先順位を使用すると、メニューが追加される前に機能が実行されます。だから削除するメニューはありません。あなたが高い優先順位を使用するならば、あなたの機能が実行される可能性が高いですafterメニューが追加されました。
これは難しい部分かもしれません。
UPDATE
プラグインをインストールして調べたところ、解決策が見つかりました。いくつかの問題といくつかのトリッキーな部分があります。
サブメニューはadd_submenu_page()
で追加されたnotで、カスタム投稿タイプで追加されています。 add_submenu_page()
による簡単な検索は、メニューのスラッグをコピーして、メニューを削除することは失敗しなければなりません。私はcptスラッグを検索して使用する必要があります。
global $submenu; var_dump( $submenu );
の後に私はこの出力を得ます
[more elements]
'edit.php?post_type=question' =>
array (size=7)
5 =>
array (size=3)
0 => string 'FAQs' (length=4)
1 => string 'edit_posts' (length=10)
2 => string 'edit.php?post_type=question' (length=27)
10 =>
array (size=3)
0 => string 'Neue FAQ' (length=8)
1 => string 'edit_posts' (length=10)
2 => string 'post-new.php?post_type=question' (length=31)
15 =>
array (size=3)
0 => string 'FAQ Titel' (length=9)
1 => string 'manage_categories' (length=17)
2 => string 'edit-tags.php?taxonomy=faq-topic&post_type=question' (length=55)
16 =>
array (size=3)
0 => string 'FAQ Tags' (length=8)
1 => string 'manage_categories' (length=17)
2 => string 'edit-tags.php?taxonomy=faq-tags&post_type=question' (length=54)
[ more elements ]
これで、メニュースラッグとしてedit.php?post_type=question
を、サブメニュースラッグとしてedit-tags.php?taxonomy=faq-topic&post_type=question
/edit-tags.php?taxonomy=faq-tags&post_type=question
を使ってサブメニューを簡単に削除することができました。
注意深く見れば、アンパサンド(&)はhtmlエンティティです。 URL部分をコピーして挿入するだけでは不可能です。ですから、エンコードされていないURLを持つサブメニューページを削除することはできません。
そして、これが最終的なコードです。
add_action( 'admin_menu', 'remove_faq_subpages', 999 );
function remove_faq_subpages() {
$ptype = 'question';
remove_submenu_page( "edit.php?post_type={$ptype}", "edit-tags.php?taxonomy=faq-tags&post_type={$ptype}" );
remove_submenu_page( "edit.php?post_type={$ptype}", "edit-tags.php?taxonomy=faq-topics&post_type={$ptype}" );
}