방금 사용자 정의 게시물 유형의 메뉴를 거의 모든 곳에 배치 할 수있는 것처럼 보이는 menu_position 매개 변수를 알아 냈습니다 . 게시물 메뉴를 제외하고!
어떻게하면 되나요?
방금 사용자 정의 게시물 유형의 메뉴를 거의 모든 곳에 배치 할 수있는 것처럼 보이는 menu_position 매개 변수를 알아 냈습니다 . 게시물 메뉴를 제외하고!
어떻게하면 되나요?
답변:
핵심 메뉴 항목의 위치
"메뉴 위치"에 대한 매개 변수 설명
$position
( integer ) ( 선택 사항 ) 메뉴 순서에서이 메뉴의 위치가 나타납니다. 기본적으로이 매개 변수를 생략하면 메뉴가 메뉴 구조의 맨 아래에 나타납니다. 숫자가 높을수록 메뉴에서의 위치가 낮아집니다.경고 : 두 메뉴 항목이 동일한 위치 속성을 사용하는 경우 하나의 항목 만 표시되도록 하나의 항목을 덮어 쓸 수 있습니다! 정수 값 대신 10 진수를 사용하면 충돌 위험을 줄일 수 있습니다 (예 : 63 대신 63.3).
기본값 : 메뉴 구조의 맨 아래
새로운 JetPack 플러그인은 메뉴 링크를 대시 보드 링크 바로 아래에 배치합니다. $ menu_order 배열을 필터링하여 메뉴 순서를 0 으로 설정하면됩니다 .
function jetpack_menu_order( $menu_order ) {
$jp_menu_order = array();
foreach ( $menu_order as $index => $item ) {
if ( $item != 'jetpack' )
$jp_menu_order[] = $item;
if ( $index == 0 )
$jp_menu_order[] = 'jetpack';
}
return $jp_menu_order;
}
호기심에서 menu_position으로 0을 시도하면 어떻게됩니까?
웹에서 솔루션을 찾고 있지만 찾지 못했습니다. 간단히이 트릭을 수행하십시오 (예 :). 다음은 기본 위치 목록입니다.
- 2 대시 보드
- 4 분리기
- 게시물 5 개
- 10 미디어
- 15 개의 링크
- 20 페이지
- 댓글 25 개
- 59 분리기
- 60 외관
- 플러그인 65 개
- 70 명의 사용자
- 75 도구
- 80 설정
- 99 분리기
더 많은 항목이있는 경우 전역 $ menu를 인쇄하여 각 항목의 현재 위치를 읽을 수 있습니다.
global $menu;
print_r($menu);
따라서 내가 잘 이해하면 원하는 메뉴를 다시 정렬 할 수 없습니다.
function re_order_menu () {
// ------- Put away items
$dashboard = $menu[2]
$separator1 = $menu[4]
$posts = $menu[5]
$media = $menu[10]
$links = $menu[15]
$pages = $menu[20]
$comments = $menu[25]
$separator2 = $menu[59]
$appearance = $menu[60]
$plugins = $menu[65]
$users = $menu[70]
$tools = $menu[75]
$settings = $menu[80]
$separator3 = $menu[99]
// -------- Reset menu
unset($menu[2]);
unset($menu[4]);
unset($menu[5]);
unset($menu[10]);
unset($menu[15]);
unset($menu[20]);
unset($menu[25]);
unset($menu[59]);
unset($menu[60]);
unset($menu[65]);
unset($menu[70]);
unset($menu[75]);
unset($menu[80]);
unset($menu[99]);
// -------- Re-order menu as you want
$dashboard = $menu[2];
$separator1 = $menu[4]
$posts = $menu[5];
$books = $menu[6];
/* my tons of custom items */
$authors = $menu[7];
$requests = $menu[8];
$clients = $menu[9];
$sellers = $menu[10];
$services = $menu[11];
$schedules = $menu[12];
/* let some space after */
$media = $menu[30];
$links = $menu[31];
$pages = $menu[32];
$comments = $menu[33];
$separator2 = $menu[59];
$appearance = $menu[60];
$plugins = $menu[65];
$users = $menu[70];
$tools = $menu[75];
$settings = $menu[80]
$separator3 = $menu[99];
}
add_action('admin_menu', 're_order_menu');
그것은 나를 위해 잘 작동하므로, 이것이 합법적이라고 생각합니다.
이것은 WordPress의 버그입니다. Trac에서이 스레드를 참조하십시오 : http://core.trac.wordpress.org/ticket/14755
4.4에서 수정 ...
https://developer.wordpress.org/reference/functions/add_menu_page/#notes
이것을 사용할 수 있습니다 :
function my_move_post () {
global $menu;
$menu[6] = $menu[5]; //move post from post 5 to 6
unset($menu[5]); //free the position 5 so you can use it!
}
add_action('admin_menu', 'my_move_post');
이제 위치 5를 사용하여 게시물 메뉴 위에 메뉴를 추가 할 수 있습니다.
여기 전체 문제에 대한 경고가 있습니다 ...
워드 프레스 4.9.2
wp-admin / menu.php :
// If we're to use $_wp_last_object_menu, increment it first.
$ptype_menu_position = is_int( $ptype_obj->menu_position ) ? $ptype_obj->menu_position : ++$_wp_last_object_menu;
주의 사항 : 정수 여야하며 이미 설정되어 있지 않아야합니다. 그렇지 않으면 목록의 맨 아래로 이동합니다.
WordPress 5 이하에서 작동하는 솔루션의 경우 다음 코드를 사용하여 재배치하십시오.
add_filter('custom_menu_order', '__return_true');
add_filter('menu_order', function($menu_order) {
if (
false !== ($k1 = array_search($v1 = 'edit.php', $menu_order))
&& false !== ($k2 = array_search($v2 = 'edit.php?post_type=foo', $menu_order))
) {
array_splice($menu_order, $k1, 0, $v2);
array_splice($menu_order, $k2 + 1, 1);
}
return $menu_order;
});
이것은 극 위치에 대해 경쟁하는 메뉴 항목이 두 개 이상 없다고 가정합니다.
같은 링크에서 다음과 같이 읽습니다.
menu_position
(integer) (optional) The position in the menu order the post type should appear.
Default: null - defaults to below Comments
5 - below Posts
10 - below Media
20 - below Pages
60 - below first separator
100 - below second separator
따라서 menu_position
와 같은 것으로 설정 하면 4
게시물 위에 배치해야합니다.
위치 -1
는 Dashboard
링크 위에 놓 입니다.
십진수 값 (문자열)을 사용할 수 있습니다. 예를 들어 메뉴의 마지막 위치 (100001, 100002, 100003)에 배치 한 사용자 지정 게시물 유형이 있습니다.
그런 다음이 코드를 넣어 게시물 위와 대시 보드 메뉴 항목 아래 로 이동하십시오 .
function reorder_admin_menu() {
global $menu;
// Add one separator
$menu["3.1"] = array(
0 => '',
1 => 'read',
2 => 'separator_' . "anything_unique",
3 => '',
4 => 'wp-menu-separator'
);
// I have put my menu items waay at the end (exactly these values), so move them up
$menu["3.2"] = $menu[100001];
$menu["3.3"] = $menu[100002];
$menu["3.4"] = $menu[100003];
unset($menu[100001]);
unset($menu[100002]);
unset($menu[100003]);
// move Media menu (position 10) item to front, in the same group
$menu["3.5"] = $menu[10];
unset($menu[10]);
// Debug: ksort($menu); error_log( var_export( $menu, true ) );
}
add_action( 'admin_menu', 'reorder_admin_menu', 999 );