다음은 예입니다.
배열 키를 기반으로 하위 메뉴 항목의 순서를 먼저 파악 var_dump
하려면 $ submenu 전역 변수에 대해 다음을 출력 할 수 있습니다 .
(예를 들어 게시물 메뉴와 하위 메뉴를 사용하고 있습니다)
//shortened for brevity....
["edit.php"]=>
array(6) {
[5]=>
array(3) {
[0]=> string(9) "All Posts"
[1]=> string(10) "edit_posts"
[2]=> string(8) "edit.php"
}
[10]=>
array(3) {
[0]=> string(7) "Add New"
[1]=> string(10) "edit_posts"
[2]=> string(12) "post-new.php"
}
[15]=>
array(3) {
[0]=> string(10) "Categories"
[1]=> string(17) "manage_categories"
[2]=> string(31) "edit-tags.php?taxonomy=category"
}
[17]=>
array(3) {
[0]=> string(14) "Sub Menu Title"
[1]=> string(10) "edit_posts"
[2]=> string(17) "sub_menu_page.php"
}
}
하위 항목이 기본 항목 다음에 17 키로 배열에 추가 된 것을 볼 수 있습니다.
예를 들어 모든 게시물 하위 메뉴 항목 바로 뒤에 하위 메뉴 항목을 추가 하려면 배열 키를 6, 7, 8 또는 9로 설정해야합니다 (각각 5, 10, 10 이전).
이것이 당신이하는 방법입니다 ...
function change_submenu_order() {
global $menu;
global $submenu;
//set our new key
$new_key['edit.php'][6] = $submenu['edit.php'][17];
//unset the old key
unset($submenu['edit.php'][17]);
//get our new key back into the array
$submenu['edit.php'][6] = $new_key['edit.php'][6];
//sort the array - important! If you don't the key will be appended
//to the end of $submenu['edit.php'] array. We don't want that, we
//our keys to be in descending order
ksort($submenu['edit.php']);
}
결과,
["edit.php"]=>
array(6) {
[5]=>
array(3) {
[0]=> string(9) "All Posts"
[1]=> string(10) "edit_posts"
[2]=> string(8) "edit.php"
}
[6]=>
array(3) {
[0]=> string(14) "Sub Menu Title"
[1]=> string(10) "edit_posts"
[2]=> string(17) "sub_menu_page.php"
}
[10]=>
array(3) {
[0]=> string(7) "Add New"
[1]=> string(10) "edit_posts"
[2]=> string(12) "post-new.php"
}
[15]=>
array(3) {
[0]=> string(10) "Categories"
[1]=> string(17) "manage_categories"
[2]=> string(31) "edit-tags.php?taxonomy=category"
}
}
... 한번 시도해 보시고 어떻게하는지 알려주세요!
업데이트 1 :
functions.php 파일에 추가하십시오;
function change_post_menu_label() {
global $menu;
global $submenu;
$my_menu = 'example_page'; //set submenu page via its ID
$location = 1; //set the position (1 = first item etc)
$target_menu = 'edit.php'; //the menu we are adding our item to
/* ----- do not edit below this line ----- */
//check if our desired location is already used by another submenu item
//if TRUE add 1 to our value so menu items don't clash and override each other
$existing_key = array_keys( $submenu[$target_menu] );
if ($existing_key = $location)
$location = $location + 1;
$key = false;
foreach ( $submenu[$target_menu] as $index => $values ){
$key = array_search( $my_menu, $values );
if ( false !== $key ){
$key = $index;
break;
}
}
$new['edit.php'][$location] = $submenu[$target_menu][$key];
unset($submenu[$target_menu][$key]);
$submenu[$target_menu][$location] = $new[$target_menu][$location];
ksort($submenu[$target_menu]);
}
내 업데이트에는 메뉴 위치 설정을 처리하는 약간 더 쉬운 방법이 포함되어 있으므로 하위 메뉴 페이지의 이름과 메뉴 내에서 원하는 위치 만 지정하면됩니다. 그러나 $location
기존 키와 동일한 하위 메뉴 페이지를 선택하면 해당 키가 사용자 키로 대체되므로 메뉴 항목이 해당 메뉴 항목과 함께 사라집니다. 이 경우 메뉴를 올바르게 주문하려면 숫자를 늘리거나 줄이십시오. 마찬가지로 누군가가 동일한 메뉴 영역에 영향을 미치고 $location
하위 메뉴 항목 과 동일한 플러그인을 설치 하면 동일한 문제가 발생합니다. 이를 피하기 위해 Kaiser의 예제는이를위한 기본적인 검사를 제공합니다.
업데이트 2 :
배열에있는 기존의 모든 키를 원하는대로 검사하는 추가 코드 블록을 추가 $location
했으며 일치하는 것이 있으면 메뉴 항목이 서로 재정의되는 것을 피하기 위해 $location
값을 증가시킵니다 1
. 이것은 그것을 담당하는 코드입니다.
//excerpted snippet only for example purposes (found in original code above)
$existing_key = array_keys( $submenu[$target_menu] );
if ($existing_key = $location)
$location = $location + 1;
업데이트 3 : (여러 하위 메뉴 항목을 정렬 할 수 있도록 스크립트 수정)
add_action('admin_init', 'move_theme_options_label', 999);
function move_theme_options_label() {
global $menu;
global $submenu;
$target_menu = array(
'themes.php' => array(
array('id' => 'optionsframework', 'pos' => 2),
array('id' => 'bp-tpack-options', 'pos' => 4),
array('id' => 'multiple_sidebars', 'pos' => 3),
)
);
$key = false;
foreach ( $target_menu as $menus => $atts ){
foreach ($atts as $att){
foreach ($submenu[$menus] as $index => $value){
$current = $index;
if(array_search( $att['id'], $value)){
$key = $current;
}
while (array_key_exists($att['pos'], $submenu[$menus]))
$att['pos'] = $att['pos'] + 1;
if ( false !== $key ){
if (array_key_exists($key, $submenu[$menus])){
$new[$menus][$key] = $submenu[$menus][$key];
unset($submenu[$menus][$key]);
$submenu[$menus][$att['pos']] = $new[$menus][$key];
}
}
}
}
}
ksort($submenu[$menus]);
return $submenu;
}
위의 예 $target_menu
에서 다차원 값 배열을 보유하는 변수 내에서 매개 변수를 적절하게 설정하여 여러 하위 메뉴 및 하위 메뉴 당 여러 항목을 대상으로 지정할 수 있습니다 .
$target_menu = array(
//menu to target (e.g. appearance menu)
'themes.php' => array(
//id of menu item you want to target followed by the position you want in sub menu
array('id' => 'optionsframework', 'pos' => 2),
//id of menu item you want to target followed by the position you want in sub menu
array('id' => 'bp-tpack-options', 'pos' => 3),
//id of menu item you want to target followed by the position you want in sub menu
array('id' => 'multiple_sidebars', 'pos' => 4),
)
//etc....
);
이 수정은 존재하지 않는 사용 가능한 키 (위치)를 찾을 때까지 순환하므로 하위 메뉴 항목이 동일한 키 (위치)를 갖는 경우 서로 덮어 쓰는 것을 방지합니다.