Ich habe den folgenden Code, der viele Dinge aufräumt, die nicht im Admin-Bereich verwendet werden:
add_action( 'admin_menu', 'my_remove_menu_pages' );
function my_remove_menu_pages() {
remove_menu_page( 'edit.php' ); //Posts
remove_menu_page( 'upload.php' ); //Media
remove_menu_page( 'edit-comments.php' ); //Comments
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
};
Es gibt jedoch zwei Menüpunkte, die aus Plugins eingefügt wurden.
Wenn ich den Mauszeiger über jeden Menüpunkt bewege, werden folgende Links angezeigt:
/wp-admin/edit.php?post_type=acf
/wp-admin/admin.php?page=wpcf7
Gibt es eine Möglichkeit, diese Menüseiten auch auszublenden?
Sie müssen die richtigen Hooks (die nicht immer mit den URLs/Slugs identisch sind) verwenden, und es tut nicht weh, einen Hook zu verwenden, der später ausgeführt wird (z. B. 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' );
}
Sie können Folgendes zum Debuggen verwenden:
add_action( 'admin_init', 'wpse_136058_debug_admin_menu' );
function wpse_136058_debug_admin_menu() {
echo '<pre>' . print_r( $GLOBALS[ 'menu' ], TRUE) . '</pre>';
}
Dies gibt (für mein Setup) Folgendes für die Menüseite des Contact Form 7-Plugins:
[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
)
Das Array-Element mit dem Schlüssel 2
ist das, wonach Sie suchen: wpcf7
.
// PLUGINS THAT ADD AS DASHBOARD SUBMENU
// IF THIS IS THE URL BELOW - THE PAGE VARIABLE IS WHAT I NEED ( SO WHATEVER COMES AFTER PAGE= )
// http://example.com/wp-admin/index.php?page=iconize-plugin-update-notifier
remove_submenu_page( 'index.php', 'iconize-plugin-update-notifier' );
// OR FOR EXAMPLE WOOCOMMERCE DASHBOARD SUBMENU
remove_submenu_page( 'index.php', 'wc-about' ); //WOO
remove_submenu_page( 'index.php', 'wc-credits' ); //WOO
remove_submenu_page( 'index.php', 'wc-translators' ); //WOO
// CUSTOM POST TYPE TOP LEVELS
remove_menu_page( 'edit.php?post_type={$POST_TYPE}' ); //LOOK FOR WHAT COMES AFTER POST TYPE IN THE URL
remove_menu_page( 'edit.php?post_type=testimonials-widget' ); //TESTIMONIALS WIDGET
remove_menu_page( 'edit.php?post_type=product' ); //WOOCOMMERCE
// CUSTOM POST TYPE SUBMENU
remove_submenu_page( 'edit.php?post_type={$POST_TYPE}', '{$SUBMENU_URL_VARIABLE}' ); //EXAMPLE FORMAT
// SO IF BELOW IS THE URL
// http://example.com/wp-admin/edit.php?post_type=testimonials-widget&page=testimonialswidget_settings
// YOU NEED TO SEE WHATS AFTER PAGE
remove_submenu_page( 'edit.php?post_type=testimonials-widget', 'testimonialswidget_settings' ); //TESTIMONIALS WIDGET
// OTHER EXAMPLES
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
SIE KÖNNEN ALLES MIT DEM FOLGENDEN DEBUGGEN, UM ALLE INFOS ZU ERHALTEN, DIE SIE BENÖTIGEN:
if (!function_exists('debug_admin_menus')):
function debug_admin_menus() {
if ( !is_admin())
return;
global $submenu, $menu, $pagenow;
if ( current_user_can('manage_options') ) { // ONLY DO THIS FOR ADMIN
if( $pagenow == 'index.php' ) { // PRINTS ON DASHBOARD
echo '<pre>'; print_r( $menu ); echo '</pre>'; // TOP LEVEL MENUS
echo '<pre>'; print_r( $submenu ); echo '</pre>'; // SUBMENUS
}
}
}
add_action( 'admin_notices', 'debug_admin_menus' );
endif;
Mit den Tasten erhalten Sie die Array-Werte, mit denen Sie all dies mit WordPress-Globals ausführen können (obwohl dies nicht empfohlen wird).
function remove_submenus_all_please() {
if ( !is_admin())
return;
global $submenu;
unset($submenu['index.php'][10]); // Removes Updates
//Posts menu
// unset($submenu['edit.php'][5]); // Leads to listing of available posts to edit
// unset($submenu['edit.php'][10]); // Add new post
// unset($submenu['edit.php'][15]); // Remove categories
// unset($submenu['edit.php'][16]); // Removes Post Tags
}
add_action('admin_menu', 'remove_submenus_all_please', 999);
Und um für bestimmte Benutzer zu entfernen, gehen Sie genauso vor, außer mit den hinzugefügten Funktionen:
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);
UND UM ALLES ZUSAMMENZUSAMMENZUSAMMENZUSAMMENZUSAMMENZUSAMMENZUSAMMENZUSAMMENZUSAMMENZUSAMMENZUSAMMENZUSAMMENZUSAMMENZUSAMMENZUSAMMENZUSAMMENFASSEN, WARUM UNSER CODE NICHT KÜRZEN? SIE KÖNNEN ARRAYS VERWENDEN, um das Schreiben von remove_submenu_page 50 Mal zu vermeiden. Dies funktioniert auch mit den Symbolleistenknoten:
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
Wahrscheinlich müssen Sie add_action priority auf eine höhere Zahl setzen und diese beiden neuen Links gezielt so ausrichten:
add_action( 'admin_menu', 'my_remove_menu_pages', 999 );
function my_remove_menu_pages() {
remove_menu_page( 'edit.php' ); //Posts
remove_menu_page( 'upload.php' ); //Media
remove_menu_page( 'edit-comments.php' ); //Comments
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
remove_menu_page( 'edit.php?post_type=acf' );
remove_menu_page( 'wpcf7' );
};
Erweiterte benutzerdefinierte Felder bieten auch ein Hilfedokument dazu, wie Sie dies für ihr Menü tun können:
http://www.advancedcustomfields.com/resources/how-to/how-to-hide-acf-menu-from-clients/
Das Kontaktformular 7 hat auch eine eigene Möglichkeit, die Sichtbarkeit des Menüs einzuschränken:
http://contactform7.com/einschränkender-Zugang-zum-Administrationspanel/
Update
I hat ein Code-Snippet erstellt mit einer robusteren Funktion, die sich sowohl mit Hauptmenüs als auch mit Untermenüelementen befasst.
Ursprüngliche Antwort
Anstatt die Menüs anzugeben, die Sie entfernen möchten, geben Sie die Menüs an, die Sie beibehalten möchten :)
add_action('admin_init', 'nwcm_admin_init');
function nwcm_admin_init()
{
// Remove unnecessary menus
$menus_to_stay = array(
// Client manager
'nwcm',
// Dashboard
'index.php',
// Users
'users.php'
);
foreach ($GLOBALS['menu'] as $key => $value) {
if (!in_array($value[2], $menus_to_stay)) remove_menu_page($value[2]);
}
}
Auf diese Weise müssen Sie nicht nach Plugin-Namen suchen und den Code ändern, wenn Sie neue Plugins hinzufügen.
Sie müssen den richtigen $ menu_slug finden. Der folgende Code hat für mich funktioniert:
add_action( 'admin_init', 'remove_menus' );
function remove_menus(){
remove_menu_page( 'wpcf7' );
}
Natürlich können Sie nur die Elemente angeben, die Sie entfernen möchten. Schauen Sie sich den folgenden Code an:
/wordpress/wp-content/plugins/your_plugin/your_plugin.php :
add_action('admin_init', 'nwcm_admin_init');
function nwcm_admin_init()
{
// Remove unnecessary menus
$menus_to_remove = array(
// menu items you want to remove
'menu_item_1',
'menu_item_2',
.
.
'menu_item_n'
);
// To avoid warning message, check whether 'menu' is set AND is an array
if(isset($GLOBALS['menu']) && is_array($GLOBALS['menu'])) {
foreach ($GLOBALS['menu'] as $key => $value) {
//Remove the '!' in the 'if' condition.
if (in_array($value[2], $menus_to_remove)) remove_menu_page($value[2]);
}
}
}
Dies ist nur das Negative der Methode von numediaweb. Danke @numediaweb. Es funktioniert gut.
P.S .: 'menu_item_1/n' -> Bewegen Sie die Maus über den Menüpunkt und rufen Sie die genaue Seite des im Link angezeigten Menüpunkts auf.
verwenden Sie dieses Code-Snippet
function your_custom_name() {
remove_menu_page('vc-general'); //the slug as seen wp-admin.php?page=vc-general
}
add_action( 'admin_init', 'your_custom_name' );