特定のユーザーロールからカスタム投稿タイプUI /メニューを非表示にできますか?


20

私がしたいことは、特定のユーザーロールからカスタム投稿タイプのUIを完全に隠すことです...これらのCPTを使用するアクセスを無効にする方法に関する多くのリソースを以前に見つけましたが、CPT UIを完全に隠すことはできませんダッシュボードにログインしているユーザーに基づいてすべて一緒に。

これは、クライアントがストアのカスタム投稿タイプから完全に離れる必要があるため重要であり、ダッシュボードでストアCPT UIを表示できる場合でも、問い合わせを行うために機能が制限されている場合でも違いはありません。結果として自分で製品を追加する方法。

私はプラグインでこれを達成しないことを本当に好みますが、私が思うにまだ肥大化していない方法でトリックを行うことができるものがあればそれは素晴らしいでしょう。

助けてくれてありがとう、SB

回答:


39

管理者以外のユーザーに対して投稿タイプのメニュー項目を非表示にするには:

function wpse28782_remove_menu_items() {
    if( !current_user_can( 'administrator' ) ):
        remove_menu_page( 'edit.php?post_type=your_post_type' );
    endif;
}
add_action( 'admin_menu', 'wpse28782_remove_menu_items' );

your_post_type 実際の投稿タイプの名前にする必要があります。

編集

削除できる他のメニューページ:

remove_menu_page('edit.php'); // Posts
remove_menu_page('upload.php'); // Media
remove_menu_page('link-manager.php'); // Links
remove_menu_page('edit-comments.php'); // Comments
remove_menu_page('edit.php?post_type=page'); // Pages
remove_menu_page('plugins.php'); // Plugins
remove_menu_page('themes.php'); // Appearance
remove_menu_page('users.php'); // Users
remove_menu_page('tools.php'); // Tools
remove_menu_page('options-general.php'); // Settings

編集2-

プラグインメニュー項目を削除します。

プラグインの場合、page=クエリ変数のみが必要なようです。もう1つ注意すべきことは、優先度です。これは、の3番目の引数admin_menu add_actionです。プラグインが既にメニューに追加されているように、十分に低く設定する必要があります(数値が大きいほど、優先度は低くなります)。

function wpse28782_remove_plugin_admin_menu() {
    if( !current_user_can( 'administrator' ) ):
        remove_menu_page('cart66_admin');
    endif;
}
add_action( 'admin_menu', 'wpse28782_remove_plugin_admin_menu', 9999 );

このようなシンプルなソリューションは、完璧に機能してくれてありがとう!
Mr.Brown

好奇心が強い、wpse28782_remove_menu_itemsあなたがランダムに選択した関数名ですか、これはWPに固有ですか?....また、このアイデアを拡張して追加のCPTをターゲットにするにはどうすればよいですか?助けてくれてありがとう!
Mr.Brown

1
@ Mr.Brown-関数名は質問のIDに基づいています(URLを確認してください)、一意であることが保証されているもので、既存の関数でない限り、好きな名前を付けることができます。remove_menu_page他のCPTや他のメニュー項目を削除する呼び出しを追加することもできます。編集をご覧ください。
ミロ

本当にありがとう、ありがとう。これは素晴らしい解決策です。
-Mr.Brown

最後にもう1つ-現在インストールされているプラ​​グインから追加のメニューに使用されるテンプレート名を見つける方法を教えてください。すなわち。remove_menu_page('cart_plugin');
Mr.Brown

2

受け入れられた回答を使用して、説明したようにカスタム投稿タイプ(およびその他の各種アイテム)を非表示にすることができます。ただし、CPT UIプラグインメニュー自体を非表示にする場合は、最初にメニューに追加するアクションを削除することもできます。

if( !current_user_can( 'administrator' ) ) {
    remove_action( 'admin_menu', 'cptui_plugin_menu' );
}

1

Adminimizeプラグインを使用することもできます。このプラグインには、すべての投稿タイプ、メタボックスなど、さまざまな役割で非表示にするオプションがあります。コーディングなし。


0

「カスタム投稿タイプUI」つまりCPTUIという名前のプラグインのメニューを非表示にする場合、最初のリンクをremove_menu_pageと組み合わせることはできません。

あなたがしなければならないのは;

function wpse_28782_remove_menus() {
    remove_menu_page('cptui_main_menu');
}
add_action('admin_init', 'wpse_28782_remove_menus');

0

すべてのショップマネージャーユーザーロール(Wordpress 5.1.1)のトップレベルメニュー「製品」の下にWoocommerceサブメニューを非表示にするには:

function remove_menus_shopmgr(){

// If the current user is a shop manager
if ( current_user_can('shop_manager') ) {

   //removes Products > Categories submenu 
    remove_submenu_page( 'edit.php?post_type=product','edit-tags.php?taxonomy=product_cat&post_type=product' );

   //removes Products > Tags submenu
    remove_submenu_page( 'edit.php?post_type=product','edit-tags.php?taxonomy=product_tag&post_type=product' ); 

    }
}

add_action( 'admin_menu', 'remove_menus_shopmgr', 999 );

0

場合はremove_menu_page、メニューを削除するのではなく、その後(それは私のためではありませんでした)あなたのための作業をしない、代替ポストタイプのメニューを表示しないようにワードプレスを伝えることです。

function wpse28782_hide_menu_items() {
    if( !current_user_can( 'administrator' ) ) {
        $post_type = get_post_type_object( 'your_post_type');
        if ($post_type) {
            $post_type->show_in_menu = false;
        }
    }
}
add_action( 'admin_menu', 'wpse28782_hide_menu_items', 99 );
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.