Cum să elimini paginile din meniul admin adăugate de plugin-uri?
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?

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
.

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!

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

// 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

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/

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..

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.
