티스토리 뷰

워드프레스의 관리자 화면은 기본적으로 툴바, 헤더, 메인 메뉴, 작업 영역, 푸터 등으로 구분된다.

플러그인 제작시 관리 메뉴와 화면을 추가할 수 있는 방법에 대해 알아본다.

(플러그인 작성 및 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); ?>

이때 첫번째 인자로 주어지는 부모 슬러그는 직접 만든 커스텀 메뉴의 페이지일 수 있고 워드프레스에서 기본적으로 생성된 페이지 일 수도 있다.

 

예:

  1. 대시보드 : add_submenu_page ('index.php',...)
  2. 게시물 의 경우 : add_submenu_page('edit.php',...)
  3. 미디어 용: add_submenu_page ('upload.php',...)
  4. 페이지 의 경우 : add_submenu_page('edit.php?post_type=page',...)
  5. 댓글 : add_submenu_page ('edit-comments.php',...)
  6. 사용자 정의 게시물 유형 : add_submenu_page ('edit.php?post_type=your_post_type',...)
  7. 외모 : add_submenu_page ('themes.php',...)
  8. 플러그인 의 경우 : add_submenu_page('plugins.php',...)
  9. 사용자 : add_submenu_page ('users.php',...)
  10. 도구 의 경우 : add_submenu_page('tools.php',...)
  11. 설정 : 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');

 

댓글