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


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-first및 menu-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.