Как удалить весь раздел Мультимедиа из основной навигации 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
}
Есть идеи? Я считаю, что подходящим методом было бы просто направить пользователя на панель мониторинга с сообщением об ошибке, если он попытается получить доступ к upload.php url-адрес? Хотя не знаю, как это сделать.
2 answers
Вы действительно правы, до обновления администратора (я полагаю, что изменение дизайна пользовательского интерфейса и т. Д.) Отключение элементов меню фактически предотвратит доступ к этим страницам, что теперь явно изменилось и требует дополнительной проверки шапки.
Это не то, что я изучал сам (как я только что узнал в этот момент), поэтому я не могу говорить о методах для этого.. но меня беспокоит, что теперь они превратили простую задачу, не решающую задачу, в более масштабную, которая требует обусловленных проверка возможностей (это просто дополнительная работа с ногами, которая ранее не требовалась).
Переходя от откровения:
Хорошо, учитывая, что эквиваленты 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
, просто чтобы разобраться с обусловливанием удаления родительского элемента..
Почему бы вам не попробовать Плагин для определения области действия ролей?