Как удалить весь раздел «Медиа» из главной навигации WordPress, не скрывая его?

Я хотел бы удалить весь раздел «Медиа» из главной навигации администратора WordPress на левой стороне. То, что я не хочу делать, это просто «скрыть» его с помощью CSS или плагина / функции, как я сделал это ниже, потому что он по-прежнему доступен через URL. Это критически важные пользователи не должны видеть загрузки друг друга любыми способами.

Вот что я сейчас имею, что просто скрывает его. Если вы перешли к upload.php в URL-адресе, вы можете получить к нему доступ.

add_action( 'admin_menu', 'remove_menu_links' ); function remove_menu_links() { remove_menu_page('upload.php'); //remove media } 

Есть идеи? Подходящий метод, я полагаю, будет просто направлять пользователя на панель управления с сообщением об ошибке, если они попытаются получить доступ к url ​​upload.php? Не уверен, как это сделать.

Вы действительно правы, до обновления администратора (я предполагаю, что пользовательский интерфейс и т. Д.), Отмена элементов из меню фактически предотвратит доступ к этим страницам, что явно изменилось сейчас и требует дополнительной проверки кепки.

Это не то, что я просмотрел сам (так как я только что узнал этот момент), поэтому я не могу говорить о методах для этого. Но мне это мешает, что теперь они превратили несложную задачу в более крупную, которая требует проверки условных возможностей (это просто больше работы с ногами, которая ранее не требовалась).

Переходя от откровения:

Ок, видя, что в настоящее время значения remove_menu_page и эквивалентов подменю почти бессмысленны (я имею в виду серьезно, что хорошо делает страницу просто скрытой от просмотра), что я предлагаю, это цикл по элементам подменю мультимедиа и обновление необходимых колпаков на лету (если это то, что вам нужно сделать).

Кажется, у этого есть желаемый результат … 🙂

 add_action( 'admin_menu', 'remove_menu_links' ); function remove_menu_links() { global $submenu; remove_menu_page('upload.php'); foreach( $submenu['upload.php'] as $position => $data ) { $submenu['upload.php'][$position][1] = 'desired cap here'; } } 

ПРИМЕЧАНИЕ. Если вы хотите, чтобы элементы полностью ушли / недоступны, просто используйте несуществующий колпачок (или просто оставьте код, как он выше).

Обновленная версия вышеуказанного кода:

Следуя вашему последнему комментарию, возможно, было бы разумно делать это так … или что-то в этом роде.

 add_action( 'admin_menu', 'remove_menu_links' ); function remove_menu_links() { global $submenu; // Remove media for non-admins if( !current_user_can('manage_options') ) remove_menu_page('upload.php'); // Still need to update cap requirements even when hidden foreach( $submenu['upload.php'] as $position => $data ) { $submenu['upload.php'][$position][1] = 'manage_options'; } } 

Я понимаю, что на самом деле вам по-прежнему нужен вызов current_user_can , чтобы справиться с условием удаления родительского элемента.

Почему бы вам не попробовать плагин Role scoper ?