Cum să elimini paginile din meniul admin adăugate de plugin-uri?

26 feb. 2014, 20:17:02
Vizualizări: 108K
Voturi: 53

Am următorul cod care curăță multe elemente care nu vor fi folosite în zona de administrare:

add_action( 'admin_menu', 'my_remove_menu_pages' );

function my_remove_menu_pages() {
  remove_menu_page( 'edit.php' );                   //Articole
  remove_menu_page( 'upload.php' );                 //Media
  remove_menu_page( 'edit-comments.php' );          //Comentarii  
  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

};

Totuși, există două elemente de meniu care au fost inserate de plugin-uri.

Când trec cu mouse-ul peste fiecare element de meniu, link-urile sunt:

/wp-admin/edit.php?post_type=acf
/wp-admin/admin.php?page=wpcf7

Există vreo modalitate de a ascunde și aceste pagini de meniu?

3
Comentarii

Poate fi o întrebare stupidă, dar de ce să hack-uiți meniul de administrare, când puteți pur și simplu să dezactivați plugin-urile în cauză?

eyoung100 eyoung100
24 mai 2014 00:27:08

@eyoung100 Există mai multe motive. Cel mai evident ar fi să ascundem anumite funcționalități de la anumiți utilizatori (sau roluri de utilizatori). De asemenea, s-ar putea dori să restrângem meniul de administrare, și astfel să fie necesară eliminarea (și readăugarea ulterioară) a anumitor intrări din meniu.

tfrommen tfrommen
23 oct. 2014 20:16:54

Dacă ai folosi o soluție prin codare, un plugin este un ajutor în acest context, cum ar fi plugin-ul 'Adminimize'. Lista de plugin-uri afișează și slug-urile necesare pentru eliminarea lor prin cod personalizat, dacă setările plugin-ului nu îți satisfac cerințele.

bueltge bueltge
22 mai 2019 10:22:50
Toate răspunsurile la întrebare 7
3
90

Trebuie să folosești hook-urile corecte (care nu sunt întotdeauna aceleași cu URL-urile/slugs-urile), și nu strica să folosești un hook care rulează mai târziu (de exemplu, admin_init):

add_action( 'admin_init', 'wpse_136058_remove_menu_pages' );

function wpse_136058_remove_menu_pages() {

    remove_menu_page( 'edit.php?post_type=acf' );
    remove_menu_page( 'wpcf7' );
}

Pentru depanare poți folosi următorul cod:

add_action( 'admin_init', 'wpse_136058_debug_admin_menu' );

function wpse_136058_debug_admin_menu() {

    echo '<pre>' . print_r( $GLOBALS[ 'menu' ], TRUE) . '</pre>';
}

Aceasta va afișa (pentru configurația mea) următoarele informații pentru meniul pluginului Contact Form 7:

[27] => Array
        (
            [0] => Formular
            [1] => wpcf7_read_contact_forms
            [2] => wpcf7
            [3] => Contact Form 7
            [4] => menu-top menu-icon-generic toplevel_page_wpcf7 menu-top-last
            [5] => toplevel_page_wpcf7
            [6] => none
        )

Elementul din array cu cheia 2 este cel pe care îl cauți: wpcf7.

26 feb. 2014 20:29:13
Comentarii

Arătând cum să afișezi meniul și să găsești ce să folosești pentru remove_menu_page() a fost de mare ajutor - m-ai învățat cum să pescuiesc în loc să-mi dai direct peștele!

Matthew Clark Matthew Clark
20 iun. 2016 22:34:48

Pentru ACF există o abordare mai bună, vezi documentația

hitautodestruct hitautodestruct
12 feb. 2017 12:55:01

Codul de depanare este de mare ajutor. Mulțumesc mult pentru share!

Devner Devner
14 iul. 2019 20:14:00
0
26
    // PLUGIN-URI CARE ADAUGĂ SUBMENIU ÎN DASHBOARD
    // DACĂ URL-UL ESTE CEL DE MAI JOS - VARIABILA PAGE ESTE CE AM NEVOIE (ORICE VINE DUPĂ PAGE= )
    // http://example.com/wp-admin/index.php?page=iconize-plugin-update-notifier
    remove_submenu_page( 'index.php', 'iconize-plugin-update-notifier' );

    // SAU DE EXEMPLU SUBMENIUL DASHBOARD WOOCOMMERCE
    remove_submenu_page( 'index.php', 'wc-about' ); //WOO
    remove_submenu_page( 'index.php', 'wc-credits' ); //WOO
    remove_submenu_page( 'index.php', 'wc-translators' ); //WOO

    // TIPURI DE POSTARE PERSONALIZATE LA NIVEL SUPERIOR
    remove_menu_page( 'edit.php?post_type={$POST_TYPE}' ); //CAUTĂ CE VINE DUPĂ POST TYPE ÎN URL
    remove_menu_page( 'edit.php?post_type=testimonials-widget' ); //TESTIMONIALS WIDGET
    remove_menu_page( 'edit.php?post_type=product' ); //WOOCOMMERCE

    // SUBMENIU PENTRU TIPURI DE POSTARE PERSONALIZATE
     remove_submenu_page( 'edit.php?post_type={$POST_TYPE}', '{$SUBMENU_URL_VARIABLE}' ); //EXEMPLU DE FORMAT
     // DE EXEMPLU DACĂ URL-UL ESTE
     // http://example.com/wp-admin/edit.php?post_type=testimonials-widget&page=testimonialswidget_settings
     // TREBUIE SĂ VEZI CE VINE DUPĂ PAGE
     remove_submenu_page( 'edit.php?post_type=testimonials-widget', 'testimonialswidget_settings' ); //TESTIMONIALS WIDGET

    // ALTE EXEMPLE
    remove_menu_page( 'revslider' ); // REVSLIDER
    remove_menu_page( 'woocommerce' ); // WOOCOMMERCE
    remove_menu_page( 'order-post-types-shop_order' ); // WOOCOMMERCE
    remove_menu_page( 'order-post-types-shop_coupons' ); // WOOCOMMERCE
    remove_menu_page( 'shortcodes-ultimate' ); // SHORTCODES ULTIMATE
    remove_menu_page( 'wp-admin-microblog/wp-admin-microblog.php' ); // ADMIN MICROBLOG
    remove_menu_page( 'snippets' ); //CODE SNIPPETS
    remove_menu_page( 'gf_edit_forms' ); // GRAVITY FORMS
        remove_submenu_page( 'gf_edit_forms', 'gf_settings' ); // GRAVITY FORMS
        remove_submenu_page( 'gf_edit_forms', 'gf_export' ); // GRAVITY FORMS
        remove_submenu_page( 'gf_edit_forms', 'gf_update' ); // GRAVITY FORMS
        remove_submenu_page( 'gf_edit_forms', 'gf_addons' ); // GRAVITY FORMS
        remove_submenu_page( 'gf_edit_forms', 'gf_help' ); // GRAVITY FORMS

        remove_submenu_page( 'cleverness-to-do-list', 'cleverness-to-do-list-settings' ); //Cleverness TODO

POȚI DEPANA TOATE ACESTA CU URMĂTORUL COD PENTRU A OBȚINE TOATE INFORMĂȚIILE DE CARE AI NEVOIE:

if (!function_exists('debug_admin_menus')):
function debug_admin_menus() {
if ( !is_admin())
        return;
    global $submenu, $menu, $pagenow;
    if ( current_user_can('manage_options') ) { // DOAR PENTRU ADMINISTRATOR
        if( $pagenow == 'index.php' ) {  // AFIȘEAZĂ ÎN DASHBOARD
            echo '<pre>'; print_r( $menu ); echo '</pre>'; // MENIURI DE NIVEL SUPERIOR
            echo '<pre>'; print_r( $submenu ); echo '</pre>'; // SUBMENIURI
        }
    }
}
add_action( 'admin_notices', 'debug_admin_menus' );
endif;

Cheile vă vor oferi valorile matricei care vă permit să faceți toate acestea cu variabile globale WordPress (deși nu este recomandat)

function remove_submenus_all_please() {
if ( !is_admin())
        return;
  global $submenu;
    unset($submenu['index.php'][10]); // Elimină Actualizări
  //Meniu Postări
 // unset($submenu['edit.php'][5]); // Conduce la lista de postări disponibile pentru editare
 // unset($submenu['edit.php'][10]); // Adaugă postare nouă
 // unset($submenu['edit.php'][15]); // Elimină categorii
 // unset($submenu['edit.php'][16]); // Elimină Etichete Postări
}
add_action('admin_menu', 'remove_submenus_all_please', 999);

Și pentru a elimina pentru anumiți utilizatori, faceți același lucru, dar cu capabilități adăugate:

function remove_by_caps_admin_menu() {
if ( !is_admin())
        return;
    if ( !current_user_can('manage_options') ) {
        remove_menu_page( 'revslider' ); // REVSLIDER
    } elseif ( !current_user_can('edit_posts') ) {
        remove_menu_page( 'woocommerce' ); // WOO
    } else {
    }
}
add_action('admin_menu', 'remove_by_caps_admin_menu', 999);

ȘI PENTRU A LEGA TOTUL ÎMPREUNĂ DE CE SĂ NU SCURTĂM CODUL? PUTEȚI FOLOSI MATRICE PENTRU A EVITA SĂ SCRIEM remove_submenu_page DE 50 DE ORI. Acest lucru funcționează și cu nodurile din bara de instrumente:

if ( !function_exists( 'remove_admin_menupages_in_array' ) ) {
function remove_admin_menupages_in_array() {
    if ( !is_admin())
        return;
          $admin_menus = array(
                                'revslider',
                                'woocommerce',
                                'shortcodes-ultimate',
          );

    foreach ( $admin_menus as $menu_page ) {
        if ( !current_user_can('manage_options') ) {
            remove_menu_page( $menu_page );
        }
    } // foreach
 } // function
add_action('admin_menu', 'remove_admin_menupages_in_array', 9999);
} // exists
25 aug. 2014 08:25:59
1
20

Probabil va trebui să setați prioritatea add_action la un număr mai mare și să țintiți specifice cele două linkuri noi astfel:

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

function my_remove_menu_pages() {
  remove_menu_page( 'edit.php' );                   //Articole
  remove_menu_page( 'upload.php' );                 //Media
  remove_menu_page( 'edit-comments.php' );          //Comentarii
  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
  remove_menu_page( 'edit.php?post_type=acf' );
  remove_menu_page( 'wpcf7' );
};

Advanced Custom Fields oferă de asemenea un document de ajutor pentru cum să faceți acest lucru pentru meniul lor aici:

http://www.advancedcustomfields.com/resources/how-to/how-to-hide-acf-menu-from-clients/

Contact Form 7 are de asemenea propriul mod de a restricționa vizibilitatea meniului:

http://contactform7.com/restricting-access-to-the-administration-panel/

26 feb. 2014 20:24:29
Comentarii

ascunderea contactform7 a funcționat pentru mine folosind remove_menu_page( 'wpcf7' );

Abel Melquiades Callejo Abel Melquiades Callejo
8 iun. 2016 11:29:08
1
10

Actualizare

Am creat un fragment de cod cu o funcție mai robustă care se ocupă atât de meniurile principale, cât și de elementele de sub-meniuri.

Răspuns original

În loc să specifici meniurile pe care vrei să le elimini, specifică meniurile pe care vrei să le păstrezi :)

add_action('admin_init', 'nwcm_admin_init');

function nwcm_admin_init()
{   
    // Elimină meniurile inutile 
    $menus_to_stay = array(
        // Manager client
        'nwcm',

        // Panou de control
        'index.php',

        // Utilizatori
        'users.php'
    );      
    foreach ($GLOBALS['menu'] as $key => $value) {          
        if (!in_array($value[2], $menus_to_stay)) remove_menu_page($value[2]);
    }   

} 

În acest fel nu trebuie să cauți numele plugin-urilor și să modifici codul atunci când adaugi plugin-uri noi..

7 sept. 2014 18:39:54
Comentarii

Exact ceea ce căutam! De asemenea, fragmentul tău de cod pare foarte bun! Mulțumesc mult pentru adăugarea soluției tale. Apreciez!

Devner Devner
14 iul. 2019 19:45:46
0

Desigur, puteți specifica doar elementele pe care doriți să le eliminați. Uitați-vă la codul de mai jos:

/wordpress/wp-content/plugins/your_plugin/your_plugin.php :


add_action('admin_init', 'nwcm_admin_init');

function nwcm_admin_init()
{   
// Elimină meniurile inutile 
$menus_to_remove = array(
    // elementele de meniu pe care doriți să le eliminați
    'menu_item_1',
    'menu_item_2',
    .
    .
    'menu_item_n'
);     

// Pentru a evita mesajele de avertizare, verifică dacă 'menu' este setat ȘI este un array
if(isset($GLOBALS['menu']) && is_array($GLOBALS['menu'])) {
   foreach ($GLOBALS['menu'] as $key => $value) {  
     //Elimină '!' din condiția 'if'.        
     if (in_array($value[2], $menus_to_remove)) remove_menu_page($value[2]);
   }
}   

} 

Acesta este doar negativul metodei lui numediaweb. Mulțumesc @numediaweb. Funcționează perfect.

P.S.: 'menu_item_1/n' -> poziționați mouse-ul peste elementul de meniu și preluați pagina exactă a acelui element de meniu afișată în link.

3 dec. 2014 14:57:23
0

Trebuie să găsești $menu_slug-ul corect. Următorul cod a funcționat pentru mine:

add_action( 'admin_init', 'remove_menus' );
function remove_menus(){
  remove_menu_page( 'wpcf7' );
}
22 ian. 2015 05:53:37
1

folosește acest fragment de cod

function your_custom_name() {    
    remove_menu_page('vc-general'); //slug-ul așa cum apare în wp-admin.php?page=vc-general  
}    
add_action( 'admin_init', 'your_custom_name' );
14 feb. 2018 17:37:37
Comentarii

Te rog să [editezi] răspunsul tău și să adaugi o explicație: de ce ar putea rezolva problema?

fuxia fuxia
14 feb. 2018 19:10:41