관리자 메뉴에 구분 기호를 추가 하시겠습니까?


22

관리자 메뉴 구분 기호를 추가하는 방법을 아는 사람이 있습니까? 내가 발견 있지만 도움이되지 않았다.

어떤 아이디어?


누군가가 여전히 이것에 대한 답변을 찾고있는 경우이 플러그인 은 작업을 처리 할 수 ​​있습니다.
user31760

답변:


33

원하는 것을 얻을 수있는 빠르고 더러운 방법이 있습니다.

배경

WordPress는이라는 전역 배열에 관리 메뉴 섹션을 저장합니다 $menu. 구분 기호를 추가 $menu하려면 분리하려는 옵션의 인덱스 사이에있는 인덱스를 사용 하여 배열에 요소를 추가합니다 .

add_admin_menu_separator()기능 사용

그래서 나는 이것에 대한 논리를 캡슐화하는 함수를 작성했다 add_admin_menu_separator(). 당신은 옵션보다 높은 배열 인덱스 번호를 선택해야합니다 , 그 후에 당신은 구분 기호를 추가 할을 한 다음 함수 호출 add_admin_menu_separator()을 통과하여 매개 변수로 인덱스를 말했다.

예를 들면 다음과 같습니다.

add_admin_menu_separator(37);

add_admin_menu_separator()함수 자체

add_admin_menu_separator()테마 functions.php파일에 복사 할 수 있는 함수의 정의는 다음과 같습니다 . 그렇습니다. 비슷하지만 전역 $menu배열 을 만들고 사용하는 코드도 마찬가지입니다 . (계획은 결국 고맙게도 폐기 할 것이지만 아마도 몇 년이 걸릴 것이다.)

function add_admin_menu_separator($position) {
  global $menu;
  $index = 0;
  foreach($menu as $offset => $section) {
    if (substr($section[2],0,9)=='separator')
      $index++;
    if ($offset>=$position) {
      $menu[$position] = array('','read',"separator{$index}",'','wp-menu-separator');
      break;
    }
  }
  ksort( $menu );
}

$menu필요한 인덱스 찾기

당신이 할 수있는 필요한 인덱스 번호를 알아낼 var_dump()의를 $GLOBALS['menu']내에서 admin_init후크. 다음은 테마 functions.php파일에 일시적으로 드롭 하여 값이 무엇인지 확인할 수있는 약간의 코드 입니다. 이것은 URL로 시작할 때만 작동합니다 /wp-admin/ (그러나 기본 테마 편집기가 아닌 FTP로 수행해야합니다. 그렇지 않으면 최소한 테마 functions.php파일에 대한 FTP 액세스가 가능할 때까지 사이트에 대한 액세스가 느슨해집니다 !) :

add_action('admin_init','dump_admin_menu');
function dump_admin_menu() {
  if (is_admin()) {
    header('Content-Type:text/plain');
    var_dump($GLOBALS['menu']);
    exit;
  }
}

참조 :

BTW에서이 링크는 일반적으로 관리자 메뉴 작업에 유용합니다.

내 관리자 메뉴 클래스는 현재 구분 기호를 쉽게 추가 할 수있는 방법을 제공하지 않지만 시간이 있으면 추가 할 것이라고 생각합니다.


고마워 마이크, 밤새 글로벌 var 메뉴를 공부했지만, 구분 기호를 추가하지 않았으므로 이제 wp에서 메뉴가 작동하는 방식이 훨씬 명확 해졌습니다.
user1147

안녕하세요 @ user1147 : 예, 이해하기가 매우 어렵습니다. 내가 처음에 그것을 할 때 꽤 많은 시간이 걸렸고, 나는 여전히 그들과 싸우고 있습니다. 따라서 내가 왜 그 함수를 작성 했으므로 지금부터 쉽게 할 수 있습니다! 어쨌든 내 대답이 도움이되어 기뻤습니다.
MikeSchinkel

1
@MikeSchinkel이 방법은 Wordpress 3.3.1에서 작동하지 않습니다.
Jim Geurts

1
@JimGeurts-그것은 나도 작동하지 않습니다 : /
Evan Mattson

2
방금 테스트 한 결과 4.5에서 "작동"하지만 WordPress는 더 이상 표시되지 않는 행을 제거하기로 결정했습니다. CSS를 추가하는 경우 해결책을 생각하지만 내 인생에서는 백엔드 개발자이므로 CSS를 추가 할 때 추가 할 CSS를 알 수 없습니다. 다른 사람이 제안 할 수 있습니까?
MikeSchinkel 2016 년

4

다음과 같이 쉽습니다.

add_action( 'admin_init', 'add_sep' );
function add_sep() {

    if ( ! is_admin() )
        return false;

    global $menu;
    $sep = $menu[4]; // that's the default separator
    $pos = 6; // change it for the desired position
    $menu = array_merge(
        array_slice( $menu, 0, $pos ),
        array( $sep ),
        array_slice( $menu, $pos + 1, -1)
    );
    $menu[ $pos - 1 ][4] .= ' menu-top-last';
    $menu[ $pos + 1 ][4] .= ' menu-top-first';

}

참고 : 기본 분리 자 위치 ( $menu[4])는이 후크 이전에 수행 한 구성 (또는 플러그인)에 따라 다를 수 있습니다.

물론 menu-top-firstmenu-top-last클래스 내성을 조정할 수도 있습니다 .


2

구분 기호가 추가되지 않는 문제가 있었지만, 워드 프레스가 중복 구분 기호를 제거하는 방식 때문이었습니다. ksort($menu);함수의 맨 아래에 추가 하면 문제가 해결되었습니다.


1

이것은 MastaBaba의 답변을 기반으로하지만 지정한 위치의 아무것도 대체하지 않습니다. 나중에 구분 기호를 추가합니다.

또한 익명 함수를 사용하므로 PHP 버전 5.3 이상과 만 호환됩니다.

add_action( 'admin_menu', function () {
    $position = 29;
    global $menu;
    $separator = [
        0 => '',
        1 => 'read',
        2 => 'separator' . $position,
        3 => '',
        4 => 'wp-menu-separator'
    ];
    if (isset($menu[$position])) {
        $menu = array_splice($menu, $position, 0, $separator);
    } else {
        $menu[$position] = $separator;
    }
});

0

수행하려는 작업을 결정하는 것은 약간 어렵지만 WordPress 관리 메뉴에 최상위 항목을 추가하려고한다고 생각합니다.

WordPress Codex 에서이 설명서 를 참조하십시오 .

요컨대, add_menu_page()많은 인수를 취하고 "대시 보드", "게시물", "미디어"등의 형제로 관리 메뉴에 추가 항목을 표시하는 함수 사용법을 찾고 있습니다 .

내가 올바르게 이해했으면 좋겠다. :-)


관리자 메뉴 구분자를 추가하려고합니다. 질문을 게시하기 전에 사용하려고했습니다 add_menu_page().
user1147

MikeSchinkel이 당신을 잘 덮은 것 같습니다. 오해에 대해 죄송합니다. 행운을 빕니다!
dgw

0

아래는 관리 메뉴가 렌더링 될 때 실행되는 Wordpress에 대한 작업을 광고합니다. 관리자 메뉴는 배열이며 여기에서 지정한 위치에 구분 기호를 정의하는 배열 요소를 추가하기 만하면됩니다.

에서 여기 :

add_action( 'admin_menu', 'set_admin_menu_separator' );
function set_admin_menu_separator() {
$position = 79;
global $menu;
$menu[$position] = array(
0   =>  '',
1   =>  'read',
2   =>  'separator' . $position,
3   =>  '',
4   =>  'wp-menu-separator'
);
}

이것은 현재 승인 된 답변과 비슷하지만 현재 승인 된 답변은 나에게 도움이되지 않았습니다 (댓글로 판단하여 여러 다른 사람들에게).


설명을 제공하지 않는 것을 제외하고는 기존의 승인 된 답변과 차이가 없습니다. 답변 방법을 읽으십시오 .
fuxia

@ toscho : 글쎄, 이것은 나를 위해 작동하고 받아 들인 대답은 그렇지 않습니다.
MastaBaba 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.