Способ удаления пунктов из админ меню WordPress
Опубликовано: 01.09.2018
Так как WordPress предоставляет готовый интерфейс панели администрирования часто встает вопрос о кастомизации той или иной части админ меню, и так как речь о том что бы дополнить не свой собственный код, а чужой, хоть и отлично документированный то эта задачка резко ставит в тупик большую и отправляет в гугл часть разработчиков.
Я правда не понимаю почему так происходит, и как имея целый набор средств отладки найти предлог для поисков готового сниппета.
Сегодня как можно догадаться по контексту речь пойдет о удалении пунктов админ меню в WordPress.
Но я попытаюсь не давать вам рыбу, а постараюсь показать удочку
Как вывести меню Wordpress в теме. Все аргументы wp_nav_menu(). Области для меню. Урок #2
Нужно отметить что в качестве дебагера я использую плагины Kint Debugger + Debug Bar и опционально Debug Bar Actions and Filters Addon, что бы быстрее находить нужные action.
Я уже писал ранее о Kint Debugger , и о том почему он хорош.
Боковое меню:
WordPress блог, админ панель. 1 часть. Chironova.ru
Предположим страшное, то нам нужно удалить из меню что то такое чего мы не нашли в гугле и скопипасить не можем. Тут на помощь нам придет дебаг
function remove_left_menu_items(){ global $menu; end($menu); d($menu); } add_action('admin_menu', 'remove_left_menu_items');С помощью конструкции d() мы может просмотреть всю структуру переменной $menu
И после отфильтровать нужные нам элементы массива,
function remove_menus(){ global $menu; //массив строк по которым мы отфильтруем меню $del_items = array( 'upload.php', "index.php" ); end($menu); foreach( $menu as $key=>$value ){ //здесь мы отбрасываем разделители (элементов в них всегда 5) if( count($value) > 5 ){ //проверяем на совпадение элемента массива и текущего пункта меню if( in_array($value[2] ,$del_items ) ){ unset($menu[$key]); } } } } add_action('admin_menu', 'remove_menus');Теперь мы можем удалять не просто те пункты меню которые описаны в примерах , но и те которые просто захотим ( например можно удалить медиафайлы или записи), можно даже кроме записей немного изменить код и удалить разделители, но не это самое важное.
Главное теперь стало намного понятней как все это работает изнутри и надеюсь появилось понимание всей простоты этого кусочка кода.
Верхнее меню:
Здесь все аналогично за исключением того что на входи у нас не массив массивов а объект класса.
function remove_top_menu_items() { global $wp_admin_bar; //смотрим содержимое переменной d($wp_admin_bar); //удаляем пукт меню $wp_admin_bar->remove_menu('wp-logo'); } add_action( 'wp_before_admin_bar_render', 'remove_top_menu_items' );В контексте функции глобальная переменная $wp_admin_bar содержит объект класса object WP_Admin_Bar с некоторым набором методов, пункты верхнего меню содержатся в nodes.
В примере я решил показать удаление пункта меню с логотипом WordPress аналогично из админбара можно удалить любой пункт верхнего меню, комментарии , добавить страницу, перейти на сайт и т.д.
P.S. В в репозитории есть несколько плагинов с похожими названиями, в статье говорится конкретно об этом https://wordpress.org/plugins/kint-debugger/