다음은 WordPress 관리 메뉴를 작성하는 방법에 대한 간단한 설명입니다. add_menu_page
API를 실제 기본 WordPress 메뉴를 의미합니다.
메뉴 파일 호출
메뉴는 분명히로로드됩니다 wp-admin/admin.php
. 그러나 WordPress 설명서를 기반으로 사용하는 표준 API를 통해로드되지 않습니다. 오히려 전체 메뉴 (가능한 모든 옵션, 하위 메뉴 등)는에 정의 된 간단한 배열을 통해로드됩니다 wp-admin/menu.php
.
그래서, 메뉴 시스템을로드 admin.php
단지 require
이야 menu.php
워드 프레스 3.0에서 라인 (99)의 주위에 ....
메뉴 불러 오기
메뉴 자체는 전역 배열에 저장됩니다 $menu
. 인라인 설명서에 따르면 메뉴 배열에는 다음 요소가 있습니다.
The elements in the array are:
* 0: Menu item name
* 1: Minimum level or capability required.
* 2: The URL of the item's file
* 3: Class
* 4: ID
* 5: Icon for top level menu
예를 들어 대시 보드는 다음과 같습니다.
$menu[2] = array( __('Dashboard'), 'read', 'index.php', '', 'menu-top menu-top-first menu-icon-dashboard', 'menu-dashboard', 'div' );
파일은 각 메뉴 항목을 배열로로드하고 모든 하위 메뉴 항목을 $submenu
부모 메뉴의 URL을 기반으로하는 인덱스 라고하는 배열로로드합니다 . 따라서 "대시 보드"라는 대시 보드의 하위 메뉴 항목은 다음과 같습니다.
$submenu[ 'index.php' ][0] = array( __('Dashboard'), 'read', 'index.php' );
시스템이 모든 메뉴를로드 한 후에 (많은 것은 없지만 시스템은 5 또는 10 씩 색인을 단계별로 밟습니다 ... 대시 보드는 첫 번째 메뉴 항목이지만 여전히 항목 "2"(PHP 배열은 인덱스 0에서 시작합니다. 따라서 약간의 조작 공간이 생깁니다).
이 시점에서 시스템은을 호출합니다 wp-admin/includes/menu.php
.
메뉴를 통해 스테핑
이 세 번째 파일은 각 메뉴 항목을 안내하며 현재 사용자에게 지정된 권한에 따라 메뉴를 사용하거나 제거합니다. 먼저 모든 하위 메뉴를 반복하고 사용자가 액세스 할 수없는 페이지를 제거합니다. 그런 다음 상위 페이지를 반복하고 동일한 작업을 수행합니다. 그런 다음 메뉴가 제거 된 상태로 남아있는 중복 구분 기호를 제거합니다.
마지막으로 할당 된 메뉴 순서에 따라 메뉴를 정렬합니다.
맞춤 메뉴 주문
후크 admin_menu
는 메뉴를 설정 한 후 주문 하기 전에 호출 됩니다. 따라서 API를 "해킹"하지 않고도 전체 WordPress 메뉴 시스템을 주문할 수 있습니다.
작업 admin_menu
이 시작되면 사용자 정의 페이지가 시스템에로드됩니다. 다음으로 발생하는 것은 WordPress가 필터를 검사하는 것입니다 custom_menu_order
...이 필터는 항상 반환 false
되며 사용자 정의 순서를 사용할지 여부를 WordPress에 알려줍니다.
플래그를 true
대신 설정하고 명시적인 메뉴 순서를 정의 하려면 테마에 다음을 추가하십시오 .
function custom_menu_order($menu_ord) {
if (!$menu_ord) return true;
return array('index.php', 'edit.php', 'edit-comments.php');
}
add_filter('custom_menu_order', 'custom_menu_order');
add_filter('menu_order', 'custom_menu_order');
모든 메뉴에 대해 원하는 순서를 지정하십시오 (메뉴로드 파일에 대한 참조를 제공하여 파일 이름 목록을 얻을 수 있음). 그러면이를 처리해야합니다.
편집 (2010 년 9 월 2 일) :
이 방법을 사용하여 맞춤 게시물 유형의 편집 화면 순서를 지정하려면 편집 화면의 URL을 알아야합니다. 나는 대부분의 경우 http://blog.url/wp-admin/edit.php?post_type=POST_TYPE
. 이는 사이트에서 루트 또는 하위 폴더에 설치된 경우 WordPress가 설정되는 방식과 사용중인 사용자 지정 게시물 유형의 슬러그에 따라 다릅니다.
예를 들어 ...
'스택 교환 질문'에 대한 사용자 지정 게시물 유형이 있고 대시 보드 아이콘 바로 아래에 대시 보드와 동일한 섹션에 편집기가 표시되도록한다고 가정하겠습니다. 테마 functions.php
파일 에 다음 코드를 사용 합니다.
function custom_menu_order($menu_ord) {
if (!$menu_ord) return true;
return array('index.php', 'edit.php?post_type=stack_exchange_questions');
}
add_filter('custom_menu_order', 'custom_menu_order');
add_filter('menu_order', 'custom_menu_order');
나머지 메뉴는 영향을받지 않지만 사용자 정의 편집 페이지는 대시 보드와 동일한 섹션으로 이동하여 바로 아래에 나타납니다. 이를 사용하여 사용자 정의 게시물 유형을 관리자 메뉴의 임의의 섹션으로 이동하고 순서대로 배치 할 수 있습니다. 동일한 방법으로 표준 메뉴 항목을 이동할 수도 있습니다.
주어진 섹션에서 모든 메뉴 항목의 순서를 지정하십시오 . 그렇지 않으면 메뉴에 예기치 않은 이상이 발생할 수 있습니다.