전체 관리자 메뉴를 제거하는 방법?


14

사용자의 관리자 패널을 사용자 정의해야합니다. 그렇다면 전체 관리자 메뉴를 어떻게 제거합니까? 메뉴 항목을 제거하지 말고 왼쪽 세로 메뉴 표시 줄을 완전히 제거하고 메뉴 디자인 (예 : CSS, 배경 등)을 포함하십시오. 비워지고 싶습니다.

CSS 해킹으로 할 수 있습니다. 그러나 나는 그것을하기 위해 후크를 사용하는 것을 선호합니다. 어떤 아이디어?

감사


궁금해. 사용자가 관리자 메뉴 항목에 액세스 할 필요가없는 경우 왜 대시 보드에 액세스해야합니까?
moraleida

동기가 궁금합니다 ... 특정 역할 / 사용자에게 숨기고 싶습니까? 사용자 지정 관리자 표시 줄 메뉴 (맨 위)를 만들고 있습니까?
brasofilo

1
예, 관리자 메뉴를 사용자 정의하고 싶습니다. 현재 관리자 메뉴가 충분하지 않은 것은 아니며 너무 '워드 프레스'느낌입니다. 제 생각에는 브랜딩에 좋지 않습니다.
dev-jim 님

이전 답변을 확인하십시오. wordpress.stackexchange.com/questions/136058/…
numediaweb

답변:


16

올바른 훅은 admin_menu제거하려는 메뉴를 제거하는 기능을 생성하는 것입니다. 다음 2 가지 기능은 모든 메뉴를 제거합니다.

add_action( 'admin_menu', 'remove_admin_menus' );
add_action( 'admin_menu', 'remove_admin_submenus' );

//Remove top level admin menus
function remove_admin_menus() {
    remove_menu_page( 'edit-comments.php' );
    remove_menu_page( 'link-manager.php' );
    remove_menu_page( 'tools.php' );
    remove_menu_page( 'plugins.php' );
    remove_menu_page( 'users.php' );
    remove_menu_page( 'options-general.php' );
    remove_menu_page( 'upload.php' );
    remove_menu_page( 'edit.php' );
    remove_menu_page( 'edit.php?post_type=page' );
    remove_menu_page( 'themes.php' );
}


//Remove sub level admin menus
function remove_admin_submenus() {
    remove_submenu_page( 'themes.php', 'theme-editor.php' );
    remove_submenu_page( 'themes.php', 'themes.php' );
    remove_submenu_page( 'edit.php', 'edit-tags.php?taxonomy=post_tag' );
    remove_submenu_page( 'edit.php', 'edit-tags.php?taxonomy=category' );
    remove_submenu_page( 'edit.php', 'post-new.php' );
    remove_submenu_page( 'themes.php', 'nav-menus.php' );
    remove_submenu_page( 'themes.php', 'widgets.php' );
    remove_submenu_page( 'themes.php', 'theme-editor.php' );
    remove_submenu_page( 'plugins.php', 'plugin-editor.php' );
    remove_submenu_page( 'plugins.php', 'plugin-install.php' );
    remove_submenu_page( 'users.php', 'users.php' );
    remove_submenu_page( 'users.php', 'user-new.php' );
    remove_submenu_page( 'upload.php', 'media-new.php' );
    remove_submenu_page( 'options-general.php', 'options-writing.php' );
    remove_submenu_page( 'options-general.php', 'options-discussion.php' );
    remove_submenu_page( 'options-general.php', 'options-reading.php' );
    remove_submenu_page( 'options-general.php', 'options-discussion.php' );
    remove_submenu_page( 'options-general.php', 'options-media.php' );
    remove_submenu_page( 'options-general.php', 'options-privacy.php' );
    remove_submenu_page( 'options-general.php', 'options-permalinks.php' );
    remove_submenu_page( 'index.php', 'update-core.php' );
}

위의 두 가지 기능을 사용하는 왼쪽 메뉴의 스크린 샷 :

여기에 이미지 설명을 입력하십시오


3
을 사용하여 다른 방법을 찾았습니다 $GLOBALS['menu'] = array();. 배열에 null을 제공하면 작업이 수행됩니다.
dev-jim 님

이것을 어디에 두나요?

그 스크린 샷에서 최근 초안을 발견 한 사람이 있습니까? ;)
acSlater

5

/wp-admin/admin-header.php-> 의 리드에 따라 /wp-admin/menu-header.php할 후크가 없습니다.

해결책은 admin_headCSS + jQuery 를 연결 하고 수행하는 것입니다.

add_action('admin_head', 'wpse_52099_script_enqueuer');
function wpse_52099_script_enqueuer(){
    if(!current_user_can('administrator')) {
        echo <<<HTML
        <style type="text/css">
        #wpcontent, #footer { margin-left: 0px; }
        </style>
        <script type="text/javascript">
        jQuery(document).ready( function($) {
            $('#adminmenuback, #adminmenuwrap').remove();
        });     
        </script>
HTML;
    }
}

[업데이트]
질문에 대한 설명에 따라 동기 부여가 관리 영역을 브랜딩 하고 있음이 분명 해지는 경우, 여기에 내가 사용하는 4 가지 플러그인이 있습니다.

  • 관리 (역할별로 필터링하여 많은 워드 프레스 인터페이스 청크 숨기기)
  • Ozh '관리 드롭 다운 메뉴 (가로 CSS 기반 드롭 다운 메뉴의 모든 관리 메뉴)
  • 관리자 메뉴 수정 (Ozh의 완벽한 동반자)
  • 관리자 조정 (이 저자의 저자이며 주요 목적은 관리자 인터페이스의 많은 영역을 사용자 정의하는 것입니다)

이 경로를 사용 wp_enqueue_script()하면 admin_enqueue_script후크 와 함께 사용하는 것이 더 좋습니다 .
mrwweb

1
@mrwweb 이렇게 작은 삽입이라도? 합당하다고 생각하십니까?
brasofilo

동의했다. 작은 스크립트 / 스타일 삽입은보다 쉽게 ​​수행 할 수 있습니다 admin_head.
chrisguitarguy 3:15에

다른 선택이없는 한 jquery를 사용하는 것을 좋아하지 않습니다. 방문자가 브라우저에서 자바 스크립트를 비활성화하면 어떻게 되나요? 그러나 일어날 가능성은 없지만 가능성이 있습니다. 어쨌든 조언을 주셔서 감사합니다.
dev-jim

내 예에서는 CSS에서 2 개의 div도 숨겨 두 번 제거하는 것이 중요합니다.
brasofilo

2

내가 아는 유일한 후크 친화적 인 방법 remove_menu_page()은 모든 단일 메뉴 항목에 사용하는 것입니다. 그럼에도 불구하고 왼쪽 막대 자체에서 어떤 일이 발생하는지 알 수 없습니다 (너비가 0px로 축소되는지 또는 무엇인지). 후크를 사용하더라도 어느 시점에서 메뉴 스타일 스타일의 나머지 부분을 정리하기 위해 관리자 스타일 시트를 큐에 넣기를 원한다고 상상해보십시오.

나는 이것을 할 때 조심할 것이다. 예를 들어 "설정"을 제거하면 "설정"메뉴에서 메뉴 페이지를 생성하는 플러그인에 연결할 수 없습니다. 일반적으로 메뉴를 완전히 제거하는 것이 얼마나 지속 가능한지 궁금합니다.


그는 관리자가 아닌 일반 사용자의 메뉴를 제거하는 방법을 찾고 있다고 확신합니다. :)
Christine Cooper

1
add_action( 'admin_menu', 'remove_admin_menus' );

function remove_admin_menus(){
    global $menu;
    $menu = array();
}

이 답변도 매우 편리합니다. 플러그인으로 만든 메뉴 페이지를 제외하고는 짧고 매력처럼 작동합니다. (관리자 만 볼 수 있기 때문에 문제가되지 않아야 함)
Charles

실제로 유용한 솔루션이지만 실제로 해당 관리 페이지에 대한 액세스를 차단하지는 않으며 관리 표시 줄에 표시되지 않게합니다. 물론 아이템을 숨기는 데 CSS 솔루션보다 낫지 만 여전히 보안 측면에서 결함이 있습니다. 정통한 사용자는 여전히 URL을 편집하여 관리 페이지에 직접 액세스 할 수 있습니다.
Marcos Buarque

0

@brasofilo의 해결책은 작은 버그가 있기 때문에 개선되었습니다. 최상의 인터넷 연결 메뉴가없는 페이지 재로드가 매우 짧은 시간 동안 나타납니다. 그것을 피하기 위해 조금 더 많은 CSS를 추가했습니다.

add_action('admin_head', 'wpse_52099_script_enqueuer');

function wpse_52099_script_enqueuer() {

    if(!current_user_can('administrator')) { 

echo <<<HTML
<style type="text/css">
#wpcontent, #footer { margin-left: 0px !important; }
#adminmenuback, #adminmenuwrap { display: none !important; }
</style>
<script type="text/javascript">
jQuery(document).ready( function($) {
    $('#adminmenuback, #adminmenuwrap').remove();
});
</script>
HTML;

    }
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.