[Wordpress] 관리자 메뉴 추가 (How to add administration menus)
워드프레스의 관리자 화면은 기본적으로 툴바, 헤더, 메인 메뉴, 작업 영역, 푸터 등으로 구분된다.
플러그인 제작시 관리 메뉴와 화면을 추가할 수 있는 방법에 대해 알아본다.
(플러그인 작성 및 Action, Filter에 대한 기본 지식을 전제로 한다.)
플러그인의 기능을 제어하는 화면을 구성하기 위한 위치 선정으로 세가지 사항을 고려해 볼 수 잇다.
1. 최상위 메뉴 페이지
2. 하위 메뉴 페이지
3. 페이지 내부 섹션
간단한 설정을 [설정]-[읽기]에 섹션을 추가하여 플러그인을 제어할 수도 있고,
[설정]-[custom submenu name]을 생성하여 새로운 페이지를 만들 수도 있다.
기본적으로 최상위 메뉴페이지는 add_menu_page()와 remove_menu_page()를 사용하여 제어한다.
이때 주의해야할 점은 접근 권한을 없애기 위해 remove_menu_page()를 사용하여서는 안된다는 것 이다.
remove_menu_page()는 단순히 메뉴에서 보이지 않게 할 뿐 실제로 제거하는 것이 아니기 때문이다.
하위메뉴는 add_submenu_page()와 remove_submenu_page()를 사용하게 되는데
<?php add_submenu_page( $parent_slug, $page_title, $menu_title, $capability, $menu_slug, $function); ?>
이때 첫번째 인자로 주어지는 부모 슬러그는 직접 만든 커스텀 메뉴의 페이지일 수 있고 워드프레스에서 기본적으로 생성된 페이지 일 수도 있다.
예:
- 대시보드 : add_submenu_page ('index.php',...)
- 게시물 의 경우 : add_submenu_page('edit.php',...)
- 미디어 용: add_submenu_page ('upload.php',...)
- 페이지 의 경우 : add_submenu_page('edit.php?post_type=page',...)
- 댓글 : add_submenu_page ('edit-comments.php',...)
- 사용자 정의 게시물 유형 : add_submenu_page ('edit.php?post_type=your_post_type',...)
- 외모 : add_submenu_page ('themes.php',...)
- 플러그인 의 경우 : add_submenu_page('plugins.php',...)
- 사용자 : add_submenu_page ('users.php',...)
- 도구 의 경우 : add_submenu_page('tools.php',...)
- 설정 : add_submenu_page ('options-general.php',...)
예시 1) 다음은 하위 메뉴 페이지의 제목이 최상위 페이지와 다른 최상위 메뉴 페이지와 하위 메뉴 페이지를 삽입하는 방법을 보여주는 간단한 예입니다. 이 예에서 'my_magic_function'은 첫 번째 하위 메뉴 페이지를 표시하는 함수의 이름입니다.
<?php
add_menu_page('Page title', 'Top-level menu title', 'manage_options', 'my-top-level-handle', 'my_magic_function');
add_submenu_page( 'my-top-level-handle', 'Page title', 'Sub-menu title', 'manage_options', 'my-submenu-handle', 'my_magic_function');
?>
예시 2) 다음은 사용자 정의 게시물 유형 메뉴 블록 아래에 옵션 페이지를 추가하는 예입니다
<?php add_submenu_page('edit.php?post_type=wiki', 'Options', 'Options', 'manage_options', 'wiki-options', array(&$this, 'options_page') ); ?>
사실상 대부분의 하위 메뉴들은 설정, 도구 또는 모양 메뉴에 속하기 때문에 Wordpress는 하위 수준 메늏 ㅏㅇ목을 상위 메뉴에 더 쉽게 추가할 수 있도록 하는 래퍼 함수를 제공하고 있다. 그러나 이름은 업데이트에 따라 변경 되었으므로 관리 화면에 표시되는 이름과 일치하지 않을 수 있다.
대시보드
<?php add_dashboard_page( $page_title, $menu_title, $capability, $menu_slug, $function); ?>
게시글
<?php add_posts_page( $page_title, $menu_title, $capability, $menu_slug, $function); ?>
미디어
<?php add_media_page( $page_title, $menu_title, $capability, $menu_slug, $function); ?>
페이지
<?php add_pages_page( $page_title, $menu_title, $capability, $menu_slug, $function); ?>
댓글
<?php add_comments_page( $page_title, $menu_title, $capability, $menu_slug, $function); ?>
외모
<?php add_theme_page( $page_title, $menu_title, $capability, $menu_slug, $function); ?>
플러그인
<?php add_plugins_page( $page_title, $menu_title, $capability, $menu_slug, $function); ?>
사용자
<?php add_users_page( $page_title, $menu_title, $capability, $menu_slug, $function); ?>
도구
<?php add_management_page( $page_title, $menu_title, $capability, $menu_slug, $function); ?>
설정
<?php add_options_page( $page_title, $menu_title, $capability, $menu_slug, $function); ?>
여기서 options page 생성과 관련하여서는 별도 학습이 필요로 하다.
그리고 가장 중요한것은 메뉴 추가의 action을 admin_init가 아닌 admin_menu에 Hook을 걸어야 한다는 것이다.
add_action('admin_menu', 'h2_add_pages');