Kann die Benutzeroberfläche / das Menü "Benutzerdefinierter Beitragstyp" für bestimmte Benutzerrollen ausgeblendet werden?

20

Ich möchte die Benutzeroberfläche für einen benutzerdefinierten Beitragstyp vollständig vor bestimmten Benutzerrollen verbergen. Ich habe zuvor viele Ressourcen zum Deaktivieren des Zugriffs auf diese CPTs gefunden, aber nichts, was es Ihnen wirklich ermöglicht, die CPT-Benutzeroberfläche vollständig zu verbergen Alles in allem basierend darauf, welcher Benutzer im Dashboard angemeldet ist.

Dies ist wichtig, da ich möchte, dass Kunden keine benutzerdefinierten Beitragstypen für das Geschäft verwenden. Wenn sie die CPT-Benutzeroberfläche des Geschäfts im Dashboard sehen, spielt es keine Rolle, ob ihre Funktionen eingeschränkt sind, da sie weiterhin nachfragen wie sie infolgedessen selbstständig Produkte hinzufügen können.

Ich würde es wirklich vorziehen, dies nicht mit einem Plugin zu erreichen, aber wenn es etwas gibt, das den Trick auf eine nicht aufgeblähte Art und Weise ausführen kann, wäre das vermutlich immer noch großartig.

Vielen Dank für Ihre Hilfe, SB

Herr Brown
quelle

Antworten:

38

So verbergen Sie ein Menüelement vom Typ "Beitrag" für Benutzer ohne Administratorrechte:

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 sollte der Name Ihres tatsächlichen Beitragstyps sein.

BEARBEITEN-

andere Menüseiten, die Sie entfernen können:

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

EDIT 2 -

Plugin-Menüpunkte entfernen.

Für Plugins benötigen Sie anscheinend nur die page=Abfragevariable. Die andere Sache, die zu beachten ist, ist die Priorität, die das dritte Argument zum ist admin_menu add_action. Es muss niedrig genug eingestellt sein (je höher die Zahl, desto niedriger die Priorität), damit sich Plugins bereits zum Menü hinzugefügt haben.

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 );
Milo
quelle
Solch eine einfache Lösung, danke, es hat perfekt funktioniert!
Mr. Brown
Ist wpse28782_remove_menu_itemsein Funktionsname, den Sie zufällig ausgewählt haben, oder ist er für WP spezifisch? .... Wie würde ich diese Idee erweitern und auf zusätzliche CPTs oder andere native WP-Menüs abzielen? Nochmals vielen Dank für die Hilfe!
Mr. Brown
1
@ Mr.Brown - der Funktionsname basiert auf der ID Ihrer Frage (überprüfen Sie die URL), nur etwas, das garantiert eindeutig ist. Sie können es benennen, was immer Sie möchten, solange es keine vorhandene Funktion ist. Sie können auch zusätzliche remove_menu_pageAnrufe hinzufügen , um andere CPTs sowie andere Menüelemente zu entfernen. Weitere Informationen finden Sie unter Meine Bearbeitung.
Milo
Also super, danke nochmal. Dies ist eine erstaunliche Lösung.
Mr. Brown
Nur eine letzte Sache - wie finde ich den Vorlagennamen, der für zusätzliche Menüs aus aktuell installierten Plugins verwendet wird? dh remove_menu_page('cart_plugin');
Mr.Brown
1

Sie können auch das Adminimize- Plugin verwenden. Dieses Plugin bietet Optionen für alle Beitragstypen, Meta-Boxen und vieles mehr, um sich in verschiedenen Rollen zu verstecken. Keine Kodierung.

bueltge
quelle
1

Die akzeptierte Antwort kann verwendet werden, um benutzerdefinierte Beitragstypen (und andere sortierte Elemente) wie beschrieben auszublenden. Wenn Sie jedoch das CPT-UI- Plug-in-Menü selbst ausblenden möchten , können Sie auch die Aktion entfernen, mit der es überhaupt zum Menü hinzugefügt wird.

if( !current_user_can( 'administrator' ) ) {
    remove_action( 'admin_menu', 'cptui_plugin_menu' );
}
Gewähren
quelle
0

Wenn Sie das Menü des Plugins ausblenden möchten, dessen Name "Benutzerdefinierter Beitragstyp" oder "CPTUI" lautet, ist es nicht möglich, den ersten Link mit "remove_menu_page" zu kombinieren.

Alles was du tun musst, ist ;

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

So verbergen Sie Woocommerce-Untermenüs im Hauptmenü "Produkte" für alle Shop Manager-Benutzerrollen (Wordpress 5.1.1):

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 );
Linda Sturling Grafikdesign
quelle
0

Wenn remove_menu_pagees bei Ihnen nicht funktioniert (es hat bei mir nicht funktioniert), können Sie WordPress auch anweisen, das Menü für den Beitragstyp nicht anzuzeigen, anstatt das Menü zu entfernen:

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 );
Brian Cryer
quelle