Как удалить страницы меню администратора, вставленные плагинами?
-
-
Может быть,глупо спрашивать,но зачем взламывать меню администратора,если можно отключить соответствующие плагины?May be Stupid to ask, but why hack the admin menu, when you could deactivate the plugins in question?
- 0
- 2014-05-23
- eyoung100
-
@eyoung100 Есть несколько причин.Наиболее очевидным было бы _hide_ определенные функции от определенных пользователей (ролей) s.Также может потребоваться реструктуризация меню администратора,и,следовательно,потребуется удалить (и снова добавить) определенные пункты меню.@eyoung100 There are several reasons. The most apparent one would be to _hide_ certain functionality from specific user( role)s. Also one might want to restructure the admin menu, and thus need to remove (and add back again) certain menu entries.
- 5
- 2014-10-23
- tfrommen
-
Если вы будете использовать решение через кодирование,плагин будет помощником в контексте,как плагин Adminimize.Список плагинов также необходимо удалить с помощью специального кода,если настройки плагина вам не нужны.If you would use a solution via coding, a plugin is a helper in context, like the plugin 'Adminimize'. The plugin list also the slugs there are necessary to remove via custom code if the settings of the plugin is not your requirement.
- 0
- 2019-05-22
- bueltge
-
7 ответ
- голосов
-
- 2014-02-26
Вам необходимо использовать правильные хуки (которые не всегда совпадают с URL/слагами),и не повредит использовать ловушку,которая запускается позже (например,
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' ); }
Для отладки можно использовать следующее:
add_action( 'admin_init', 'wpse_136058_debug_admin_menu' ); function wpse_136058_debug_admin_menu() { echo '<pre>' . print_r( $GLOBALS[ 'menu' ], TRUE) . '</pre>'; }
Это дает (для моей настройки) следующее для страницы меню плагина 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 )
Элемент массива с ключом
2
- это то,что вы ищете:wpcf7
.You need to use the right hooks (which are not always the same as the URLs/slugs), and it doesn't hurt to use a hook that runs later (e.g.,
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' ); }
You can use the following to debug:
add_action( 'admin_init', 'wpse_136058_debug_admin_menu' ); function wpse_136058_debug_admin_menu() { echo '<pre>' . print_r( $GLOBALS[ 'menu' ], TRUE) . '</pre>'; }
This gives (for my setup) the following for the Contact Form 7 plugin menu page:
[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 )
The array element with key
2
is what you are looking for:wpcf7
.-
Показывать,как сбросить меню и найти,что использовать для `remove_menu_page ()`,было огромным подспорьем - научил меня ловить рыбу,а не просто отдавать мне рыбу!Showing how to dump the menu and find what to use for `remove_menu_page()` was a huge help -- taught me how to fish instead of just handing me the fish!
- 6
- 2016-06-20
- Matthew Clark
-
Для acf есть лучший подход,см. [Документы] (https://www.advancedcustomfields.com/resources/how-to-hide-acf-menu-from-clients/)For acf there is a better approach see [the docs](https://www.advancedcustomfields.com/resources/how-to-hide-acf-menu-from-clients/)
- 0
- 2017-02-12
- hitautodestruct
-
Код отладки очень помогает.Большое спасибо за то,что поделился!The debug code is of great help. Thanks a ton for sharing!
- 0
- 2019-07-14
- Devner
-
- 2014-02-26
Вероятно,вам нужно установить приоритет add_action на более высокое значение и настроить таргетинг на эти две новые ссылки именно так :
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' ); };
Расширенные настраиваемые поля также содержат справочный документ о том,как это сделать для их меню здесь:
http://www.advancedcustomfields.com/ресурсы/как-к/как-скрыть-acf-меню-от-клиентов/
Контактная форма 7 также имеет собственный способ ограничения видимости меню:
http://contactform7.com/restricting-access-to-the-administration-panel/
You probably need to set the add_action priority to a higher number and target those two new links specifically like so:
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' ); };
Advanced Custom Fields also provides a help document on how to do this for their menu here:
http://www.advancedcustomfields.com/resources/how-to/how-to-hide-acf-menu-from-clients/
Contact Form 7 also has it's own way of restricting the visibility of the menu:
http://contactform7.com/restricting-access-to-the-administration-panel/
-
скрытие contactform7 сработало для меня с помощью `remove_menu_page ('wpcf7');`hiding contactform7 worked for me by using `remove_menu_page( 'wpcf7' );`
- 0
- 2016-06-08
- Abel Melquiades Callejo
-
- 2014-08-25
// 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
ВЫ МОЖЕТЕ ОТЛАДИТЬ ВСЕ ЭТО С ПОМОЩЬЮ ВСЕЙ НУЖНОЙ ИНФОРМАЦИИ:
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;
Ключи предоставят вам значения массива,которые позволят вам делать все это с помощью глобальных переменных wordpress (хотя и не рекомендуется)
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);
И для удаления некоторых пользователей проделайте то же самое,но с добавленными возможностями:
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);
И ЧТОБЫ СВЯЗАТЬ ВСЕ ВМЕСТЕ,ПОЧЕМУ НЕ УКРОЧИТЬ НАШ КОД? ВЫ МОЖЕТЕ ИСПОЛЬЗОВАТЬ МАССИВЫ,ЧТОБЫ ИЗБЕЖАТЬ ЗАПИСИ remove_submenu_page 50 раз. Это также работает с узлами панели инструментов:
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
// 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
YOU CAN DEBUG ALL THIS WITH THE FOLLOWING TO GET ALL THE INFO YOU NEED:
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;
The keys will give you the array values that allow you do all of this with wordpress globals (although not recommended)
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);
And to remove for certain users just do the same thing except with capabilities added:
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);
AND TO TIE IT ALL TOGETHER WHY NOT SHORTEN OUR CODE? YOU CAN USE ARRAYS TO AVOID WRITING remove_submenu_page 50 times. This also works with the toolbar nodes:
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
-
- 2014-09-07
< sizesUpdate
Я создал фрагмент кода с более надежной функцией,которая имеет дело как с основными меню,так и с подпунктами-пункты меню.
Исходный ответ
Вместо того,чтобы указывать меню,которые вы хотите удалить,укажите те меню,которые вы хотите сохранить :)
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]); } }
Таким образом,вам не нужно искать названия плагинов и изменять код при добавлении новых плагинов.
Update
I created a code snippet with a more robust function that deals with both main menus and sub-menu items.
Original answer
Instead of specifying the menus you want to remove, specify the menues you want to keep :)
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]); } }
This way you don't have to search for plugin names and modify the code when you add new plugins..
-
Именно то,что я искал!Также ваш фрагмент кода кажется отличным!Большое спасибо за добавление вашего решения.Ценить это!Exactly what I was looking for! Also your Code snippet seems like a great one! Thanks a ton for adding your solution. Appreciate it!
- 0
- 2019-07-14
- Devner
-
- 2015-01-22
Вам нужно найти правильный $menu_slug.У меня сработал следующий код:
add_action( 'admin_init', 'remove_menus' ); function remove_menus(){ remove_menu_page( 'wpcf7' ); }
You need to find the right $menu_slug. The following code worked for me:
add_action( 'admin_init', 'remove_menus' ); function remove_menus(){ remove_menu_page( 'wpcf7' ); }
-
- 2014-12-03
Конечно,вы можете указать только те элементы,которые хотите удалить.Взгляните на приведенный ниже код:
/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]); } } }
Это просто минус методаnumediaweb.Спасибо @numediaweb.Работает нормально.
P.S .: 'menu_item_1/n' -> наведите указатель мыши на элемент меню и выберите точную страницу этого элемента меню,показанного в ссылке.
Of course you can specify only the items you want to remove. Have a look in the code below:
/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]); } } }
This is just the negative of numediaweb's method. Thanks @numediaweb. It works fine.
P.S.: 'menu_item_1/n' -> point mouse over the menu item and fetch the exact page of that menu item shown in the link.
-
- 2018-02-14
используйте этот фрагмент кода
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' );
use this 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' );
-
Пожалуйста,** [отредактируйте] свой ответ ** и добавьте пояснение: ** почему ** это может решить проблему?Please **[edit] your answer**, and add an explanation: **why** could that solve the problem?
- 0
- 2018-02-14
- fuxia
У меня есть следующий код,который очищает множество вещей,которые не будут использоваться в административной области:
Однако есть два пункта меню,которые были вставлены из плагинов.
При наведении курсора на каждый пункт меню появляются следующие ссылки:
Есть ли способ скрыть и эти страницы меню?