Как удалить весь раздел Мультимедиа из основной навигации 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-адрес? Хотя не знаю, как это сделать.

Author: Andrew, 2011-07-28

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, просто чтобы разобраться с обусловливанием удаления родительского элемента..

 5
Author: t31os, 2011-07-28 18:17:36
 0
Author: PrivateUser, 2011-07-28 11:59:40