Este posibil să ascunzi interfața/meniul Custom Post Type pentru anumite roluri de utilizatori?

17 sept. 2011, 21:51:53
Vizualizări: 55.9K
Voturi: 25

Ceea ce încerc să fac este să ascund complet interfața pentru un custom post type de la anumite roluri de utilizatori... Am găsit anterior multe resurse despre cum să dezactivezi accesul la acele CPT-uri, dar nimic care să-ți permită să ascunzi complet interfața CPT în funcție de utilizatorul conectat în panoul de administrare.

Acest lucru este important deoarece trebuie ca clienții să stea complet departe de custom post type-urile magazinului, și dacă pot vedea în continuare interfața CPT pentru magazin în panoul de administrare, nu contează dacă permisiunile lor sunt restricționate, deoarece tot vor întreba cum pot adăuga produse pe cont propriu ca urmare.

Aș prefera să nu realizez acest lucru cu un plugin, totuși dacă există ceva care poate face treaba într-un mod neîncărcat, ar fi de asemenea bine, presupun.

Mulțumesc pentru ajutor, SB

0
Toate răspunsurile la întrebare 7
14
50

Pentru a ascunde un element de meniu al tipului de postare de la utilizatorii non-administrator:

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 trebuie să fie numele tipului tău real de postare.

EDITARE-

alte pagini de meniu pe care le poți elimina:

remove_menu_page('edit.php'); // Postări
remove_menu_page('upload.php'); // Media
remove_menu_page('link-manager.php'); // Link-uri
remove_menu_page('edit-comments.php'); // Comentarii
remove_menu_page('edit.php?post_type=page'); // Pagini
remove_menu_page('plugins.php'); // Plugin-uri
remove_menu_page('themes.php'); // Aspect
remove_menu_page('users.php'); // Utilizatori
remove_menu_page('tools.php'); // Unelte
remove_menu_page('options-general.php'); // Setări

EDITARE 2 -

Eliminarea elementelor de meniu ale plugin-urilor.

Pentru plugin-uri, se pare că ai nevoie doar de variabila de interogare page=. Alt lucru de notat este prioritatea, care este al treilea argument al admin_menu add_action. Aceasta trebuie setată suficient de jos (cu cât numărul este mai mare, cu atât prioritatea este mai mică) astfel încât plugin-urile să se fi adăugat deja în meniu.

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 );
17 sept. 2011 22:14:36
Comentarii

O soluție atât de simplă, mulțumesc, a funcționat perfect!

Mr.Brown Mr.Brown
17 sept. 2011 22:28:11

Sunt curios, wpse28782_remove_menu_items este un nume de funcție ales la întâmplare sau este specific WP?....De asemenea, cum aș putea să extind această idee și să țintesc CPT-uri suplimentare sau, de altfel, alte meniuri native WP? Mulțumesc din nou pentru ajutor!

Mr.Brown Mr.Brown
17 sept. 2011 22:32:36

@Mr.Brown - numele funcției se bazează pe ID-ul întrebării tale (verifică URL-ul), doar ceva garantat a fi unic, poți să îl denumești cum dorești atâta timp cât nu este o funcție existentă. Poți adăuga și apeluri suplimentare remove_menu_page pentru a elimina alte CPT-uri, precum și alte elemente de meniu, vezi ediția mea.

Milo Milo
17 sept. 2011 23:05:01

Foarte tare, mulțumesc din nou. Aceasta este o soluție uimitoare.

Mr.Brown Mr.Brown
17 sept. 2011 23:06:51

Doar un ultim lucru - cum pot afla numele template-ului folosit pentru meniurile adiționale din plugin-urile instalate? De exemplu remove_menu_page('cart_plugin');

Mr.Brown Mr.Brown
17 sept. 2011 23:11:23

Am încercat să trec cu mouse-ul peste elementul de meniu și să folosesc calea afișată, dar nu a funcționat, meniul încă apare, deși celelalte elemente de meniu corespund exact când treci cu mouse-ul peste ele, la fel ca în exemplul tău... Folosesc plugin-ul Cart66 și aceasta a fost calea afișată când am trecut mouse-ul peste ea remove_menu_page( 'admin.php?page=cart66_admin' ); - dar nu a funcționat.

Mr.Brown Mr.Brown
17 sept. 2011 23:23:03

@Mr.Brown - vezi modificarea de mai sus.

Milo Milo
18 sept. 2011 02:12:08

Uimitor, ai fost extrem de util. Deci toate plugin-urile au nevoie doar de ultima parte a căii și nu de page=, așa-i?

Mr.Brown Mr.Brown
18 sept. 2011 05:42:58

@Mr.Brown - cred că da, cel puțin cele pe care le-am verificat. Ca test, în funcția ta admin_menu poți adăuga global $menu; apoi print_r( $menu );, care va afișa array-ul din care este construit meniul (vezi sursa paginii sau încadrează-l într-un tag <pre> pentru o lizibilitate mai bună). Elementul cu indexul 2 din fiecare sub-array al meniului este ceea ce vrei să folosești cu remove_menu_page

Milo Milo
18 sept. 2011 06:09:16

Milo - mulțumesc foarte mult!...acest forum este întotdeauna fantastic, dar dumneavoastră, domnule, m-ați ajutat să învăț ceva cu adevărat pentru o dată, așa că vă mulțumesc pentru răbdare și pentru timpul acordat să explicați totul pentru un începător ca mine! Cele mai bune, SB.

Mr.Brown Mr.Brown
18 sept. 2011 07:17:50

Rețineți că această soluție elimină meniul, dar nu împiedică utilizatorul să acceseze acele pagini prin URL.

MZAweb MZAweb
19 ian. 2014 18:38:43

@MZAweb - corect, dar dacă citești întrebarea, nu asta era cerut. Abilitatea de a accesa paginile era deja gestionată prin capabilități.

Milo Milo
19 ian. 2014 18:45:52

Răspuns excelent, a funcționat perfect... mulțumesc că ai inclus și cum să ascunzi elemente în afară de CPT-uri.

Simon Simon
19 ian. 2016 17:40:39

Cum rămâne cu eliminarea New > Post | Media | Page | CPT? Pentru asta este nevoie doar de hook-ul admin_bar_menu - https://wordpress.stackexchange.com/a/76647/84219

jgraup jgraup
19 sept. 2018 23:25:40
Arată celelalte 9 comentarii
0

Răspunsul acceptat poate fi folosit pentru a ascunde tipurile de postări personalizate (și alte elemente diverse) așa cum este descris. Dar dacă doriți să ascundeți meniul propriu-zis al pluginului CPT UI, puteți elimina acțiunea care îl adaugă în meniu în primul rând.

if( !current_user_can( 'administrator' ) ) {
    remove_action( 'admin_menu', 'cptui_plugin_menu' );
}
15 oct. 2018 16:21:23
0

Puteți utiliza și plugin-ul Adminimize. Acest plugin oferă opțiuni pentru toate tipurile de postări, cutii meta și multe altele pentru a ascunde elemente pe diferite roluri. Fără codare.

11 ian. 2013 21:29:12
0

Dacă dorești să ascunzi meniul pluginului numit "Custom Post Type UI" sau CPTUI, nu este posibil prin combinarea primului link cu remove_menu_page.

Tot ce trebuie să faci este:

function wpse_28782_remove_menus() {
    remove_menu_page('cptui_main_menu');
}
add_action('admin_init', 'wpse_28782_remove_menus');
20 dec. 2018 21:57:08
0

Dacă dorești să dezactivezi anumite meniuri pentru un anumit rol de utilizator, folosește acest cod-

function wp2024_remove_unnecessary_menus() {
    $current_user = wp_get_current_user();

    // Definește meniurile care trebuie eliminate
    $menus_to_remove = [
        'elementor',
        'themes.php',
        'plugins.php',
    ];

    if ( in_array( 'user_role_slug', $current_user->roles, true ) ) {
        foreach ( $menus_to_remove as $menu_slug ) {
            remove_menu_page( $menu_slug );
        }
    }
}
add_action( 'admin_menu', 'wp2024_remove_unnecessary_menus', 99 );
22 nov. 2024 10:21:37
0

Pentru a ascunde submeniurile WooCommerce de sub meniul principal "Produse" pentru toate rolurile de utilizator Shop Manager (WordPress 5.1.1):

function remove_menus_shopmgr(){

// Dacă utilizatorul curent este un manager de magazin
if ( current_user_can('shop_manager') ) {

   //elimină submeniul Produse > Categorii
    remove_submenu_page( 'edit.php?post_type=product','edit-tags.php?taxonomy=product_cat&amp;post_type=product' );

   //elimină submeniul Produse > Etichete
    remove_submenu_page( 'edit.php?post_type=product','edit-tags.php?taxonomy=product_tag&amp;post_type=product' ); 

    }
}

add_action( 'admin_menu', 'remove_menus_shopmgr', 999 );
23 apr. 2019 07:56:55
1

Dacă remove_menu_page nu funcționează pentru tine (nici pentru mine nu a funcționat), atunci în loc să elimini meniul, o alternativă este să-i spui WordPress să nu afișeze meniul pentru tipul de postare:

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 );
11 sept. 2019 11:52:45
Comentarii

Acest lucru nu pare să funcționeze pentru mine într-o configurare multisite.

Saqib Saqib
24 sept. 2024 16:53:25