Adiciona um separador ao menu do administrador?

19

Alguém sabe como adicionar um separador de menu do administrador? Eu encontrei isso mas não ajudou.

Alguma idéia?

    
por user1147 06.10.2010 / 22:02

6 respostas

31

Aqui está uma maneira rápida e suja de conseguir o que você quer.

Antecedentes

WordPress armazena seções do menu admin em um array global chamado $menu . Para adicionar um separador, você adiciona um elemento à matriz $menu usando um índice entre os índices das opções que deseja separar.

Usando a função add_admin_menu_separator()

Então eu escrevi uma função para encapsular a lógica para isso, chamei add_admin_menu_separator() . Você precisará escolher um número de índice de matriz que seja maior que a opção após a qual você deseja adicionar um separador e, em seguida, chamar a função add_admin_menu_separator() passando o referido índice como seu parâmetro.

Por exemplo:

add_admin_menu_separator(37);

A função add_admin_menu_separator() em si

Aqui está a definição da função add_admin_menu_separator() que você pode copiar no arquivo functions.php do seu tema. Sim, é arcano, mas é o código que cria e usa a matriz global $menu . (Os planos são para depreciá-lo, felizmente, mas isso provavelmente levará alguns anos.)

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

Encontrando o índice em $menu que você precisa

Para descobrir qual número de índice você precisa, você pode fazer um var_dump() de $GLOBALS['menu'] de dentro de um admin_init hook. Aqui está um pequeno código que você pode colocar no arquivo functions.php do seu tema temporariamente para ver quais são os valores. Isso só funcionará ao solicitar uma URL que começa com /wp-admin/ (mas certifique-se de fazer com o FTP e não o editor de temas integrado ou você perderá acesso ao seu site, pelo menos até obter acesso FTP a o arquivo functions.php do seu tema!) :

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

Veja também:

BTW, você pode achar esses links úteis em geral para trabalhar com menus de administração:

Embora minhas classes de menu do administrador não ofereçam uma maneira fácil de adicionar separadores, acho que adicionarei isso agora quando tiver tempo.

    
por MikeSchinkel 07.10.2010 / 04:00
3

É fácil como:

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

}

Nota: A posição do separador padrão ( $menu[4] ) pode ser diferente dependendo de qual configuração você (ou seus plugins) fizeram antes deste gancho.

Claro, você também pode ajustar a introspecção das classes menu-top-first e menu-top-last .

    
por vmassuchetto 19.09.2012 / 15:06
2

Alguns problemas com separadores não foram adicionados, devido à maneira como o wordpress remove os separadores duplicados. Adicionar ksort($menu); à parte inferior da função corrigiu o problema.

    
por Kieran Baker 18.11.2010 / 04:15
1

Isso se baseia na resposta de MastaBaba, mas não substitui nada na posição que você especificou - apenas adiciona o separador depois.

Também usa uma função anônima, sendo compatível apenas com o PHP versão 5.3 e superior.

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;
    }
});
    
por robrecord 08.05.2018 / 14:44
0

É um pouco difícil determinar o que você está tentando fazer, mas acho que você quer adicionar uma entrada de nível superior no menu de administração do WordPress.

Veja esta documentação no WordPress Codex.

Em suma, você está procurando o uso da função add_menu_page() , que recebe vários argumentos e exibe um item adicional no menu administrativo como um irmão de "Dashboard", "Posts", "Media", etc.

Espero ter acertado. : -)

    
por dgw 06.10.2010 / 22:32
0

Os anúncios abaixo mostram uma ação para o Wordpress que é executada quando o menu do administrador é renderizado. O menu admin é uma matriz e tudo o que você está fazendo aqui é adicionar um elemento de matriz que define um separador na posição especificada.

De aqui :

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

Note que, embora isso se pareça com a resposta aceita atualmente, a resposta aceita atualmente não funcionou para mim (e, a julgar pelos comentários, por vários outros).

    
por MastaBaba 19.06.2016 / 15:57