menu_position을 사용하여 게시물 메뉴 위에 사용자 정의 게시물 유형 메뉴를 배치 하시겠습니까?


답변:


14

핵심 메뉴 항목의 위치

  • 2 대시 보드
  • 4 분리기
  • 게시물 5 개
  • 10 미디어
  • 15 개의 링크
  • 20 페이지
  • 댓글 25 개
  • 59 분리기
  • 60 외관
  • 플러그인 65 개
  • 70 명의 사용자
  • 75 도구
  • 80 설정
  • 99 분리기

"메뉴 위치"에 대한 매개 변수 설명

$position( integer ) ( 선택 사항 ) 메뉴 순서에서이 메뉴의 위치가 나타납니다. 기본적으로이 매개 변수를 생략하면 메뉴가 메뉴 구조의 맨 아래에 나타납니다. 숫자가 높을수록 메뉴에서의 위치가 낮아집니다.

경고 : 두 메뉴 항목이 동일한 위치 속성을 사용하는 경우 하나의 항목 만 표시되도록 하나의 항목을 덮어 쓸 수 있습니다! 정수 값 대신 10 진수를 사용하면 충돌 위험을 줄일 수 있습니다 (예 : 63 대신 63.3).

기본값 : 메뉴 구조의 맨 아래


4

새로운 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

'menu_postion'=> 0, 1,2,3,4를 사용했습니다.

정말 중요하지 않습니다. 당신이 그것을 가지고 놀면 쉽게 알아낼 수 있습니다.

'menu_position'=> 1을 사용하면 구분 기 위의 대시 보드 메뉴 항목 아래에 배치해야합니다. 0 대시 보드 위에 놓아야합니다


2

웹에서 솔루션을 찾고 있지만 찾지 못했습니다. 간단히이 트릭을 수행하십시오 (예 :). 다음은 기본 위치 목록입니다.

  • 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');

그것은 나를 위해 잘 작동하므로, 이것이 합법적이라고 생각합니다.


마법의 숫자에 의존하는 매우 취약한 솔루션 . 다른 플러그인을 추가 / 제거하면 다른 플러그인과 함께 항목을 배치하는 즉시 중단됩니다.
Walf November


1

이것을 사용할 수 있습니다 :

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를 사용하여 게시물 메뉴 위에 메뉴를 추가 할 수 있습니다.


이것은 나를 위해 작동하지 않았습니다. 내 custom-post-type.php 파일이있는 사이트 전체 플러그인 내에 배치했습니다
Daniel

1

여기 전체 문제에 대한 경고가 있습니다 ...

워드 프레스 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; 

주의 사항 : 정수 여야하며 이미 설정되어 있지 않아야합니다. 그렇지 않으면 목록의 맨 아래로 이동합니다.


1

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;
});

이것은 극 위치에 대해 경쟁하는 메뉴 항목이 두 개 이상 없다고 가정합니다.


0

같은 링크에서 다음과 같이 읽습니다.

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게시물 위에 배치해야합니다.

위치 -1Dashboard링크 위에 놓 입니다.


4를 시도했지만 5와 정확히 동일합니다.
janoChen

으르렁 1-3을 시도? 아마도 "1"(또는 "0")은 대시 보드라고 생각합니다. 아마도 2-3 정도의 효과가있을 것입니다
Zack

0 1 2 3 대시 보드보다 먼저 가고 게시물 아래에 4가 있습니다. 정말 불가능합니다!
janoChen

와. 많은 워드 프레스를 깰까요? 그때 모르겠어요 :-/
Zack

4는 Posts 바로 위의 구분 기호이고 5는 Posts이므로 메뉴 위치를 3으로 설정하면 구분 기호 바로 앞에 있습니다. 물론 기본 구성으로. 플러그인 페이지를 4로 설정하면 구분 기호를 덮어 쓰지만 게시물 바로 위에 나타났습니다. hmmm ...
goldenapples

0

십진수 값 (문자열)을 사용할 수 있습니다. 예를 들어 메뉴의 마지막 위치 (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 );
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.