Colocando um menu de tipo de postagem personalizado acima do menu de postagens Usando menu_position?

17

Acabei de descobrir o parâmetro menu_position , parece que você pode colocar o menu do seu tipo de postagem personalizado em quase todos os lugares. Exceto acima do menu Postagens!

Como posso conseguir isso?

janoChen
fonte
Boa pergunta, parece que esse é o lugar para onde não vai.
Jnthnclrk

Respostas:

14

Posições para itens de menu principais

  • 2 Painel
  • 4 Separador
  • 5 Postagens
  • 10 Mídia
  • 15 Links
  • 20 Pages
  • 25 Comentários
  • 59 Separador
  • 60 Aparência
  • 65 Plugins
  • 70 Usuários
  • 75 Ferramentas
  • 80 Configurações
  • 99 Separator

Descrição do parâmetro para "posição do menu"

$position( inteiro ) ( opcional ) A posição na ordem dos menus em que este menu deve aparecer. Por padrão, se esse parâmetro for omitido, o menu aparecerá na parte inferior da estrutura do menu. Quanto maior o número, menor a sua posição no menu.

AVISO: se dois itens de menu usarem o mesmo atributo de posição, um dos itens poderá ser substituído, para que apenas um item seja exibido! O risco de conflito pode ser reduzido usando valores decimais em vez de números inteiros, por exemplo, 63.3 em vez de 63.

Padrão: parte inferior da estrutura do menu

Michael Ecklund
fonte
4

O novo JetPack Plugin coloca seu link de menu imediatamente abaixo do link Dashboard. Para isso, defina sua ordem de menu como 0, filtrando a matriz $ menu_order :

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

Por curiosidade, o que aconteceria se você tentasse 0 como menu_position?

Chip Bennett
fonte
2

Eu usei 'menu_postion' => 0, 1,2,3,4.

Realmente não importa. Se você brinca com ele, pode facilmente descobrir.

Usar 'menu_position' => 1 deve colocá-lo abaixo do item de menu Painel acima do separador. 0 Deve colocá-lo acima do painel

jaredwilli
fonte
2

Procurando uma solução na Web, mas não foi encontrada. Simplesmente faz esse truque (por exemplo). Aqui você tem a lista nativa de posições:

  • 2 Painel
  • 4 Separador
  • 5 Postagens
  • 10 Mídia
  • 15 Links
  • 20 Pages
  • 25 Comentários
  • 59 Separador
  • 60 Aparência
  • 65 Plugins
  • 70 Usuários
  • 75 Ferramentas
  • 80 Configurações
  • 99 Separator

Se você tiver mais itens, poderá ler a posição atual de cada item imprimindo o menu global $:

global $menu; 
print_r($menu); 

Portanto, se eu entender bem, nada pode impedir que reordenemos o menu como queremos:

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

Funciona bem para mim, então, acho que isso é legítimo, estou errado?

Nolan Crochot
fonte
Solução muito frágil que depende de números mágicos . Ele quebraria assim que algum outro plugin fosse adicionado / removido, colocando um item entre outros.
Walf
1

Você pode usar isto:

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

Agora você pode usar a posição 5 para adicionar seu menu acima do menu Postar.

eduardogoncalves
fonte
Isto não funcionou para mim. Coloquei-o dentro do meu plugin do site inteiro, onde meu arquivo custom-pós-type.php é
Daniel
1

aqui está a ressalva para toda a questão ...

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

AVISO: deve ser um número inteiro e NÃO já está definido, caso contrário, vai para o final da lista.

Artistan
fonte
1

Para uma solução funcional no WordPress 5 e abaixo, reposicione-a com o seguinte código:

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

Isso pressupõe que você não tenha mais de um item de menu disputando a pole position.

Walf
fonte
0

No mesmo link que você vinculou, ele lê:

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

Portanto, se você definir menu_positionalgo como 4, deve colocá-lo acima das postagens.

Uma posição de -1coloca-o acima do Dashboardlink.

Zack
fonte
Tentei 4 mas exatamente o mesmo que 5.
janoChen
Hrm. Tentei 1-3? Eu acho que talvez "1" (ou "0") seja o painel. Talvez algo 2-3 iria trabalhar
Zack
0 1 2 3 Vai antes do painel e 4 vai abaixo das postagens. É realmente impossível!
janoChen
Uau. quebrado muito WordPress? Eu não sei então. : - /
Zack
Eu acho que 4 é o separador logo acima de Posts e 5 é Posts, então, se você definir a posição do menu para 3, será logo antes do separador. Com a configuração padrão, é claro. Definir minha página de plug-in como 4 substituiu o separador, mas apareceu logo acima das postagens. hmmm ...
goldenapples 28/03
0

Você pode usar valores decimais (como cadeias). Por exemplo, tenho alguns tipos de postagem personalizados que coloquei na última posição no menu (100001, 100002, 100003).

Em seguida, basta colocar esse código para movê-los acima de Postagens e abaixo dos itens de menu do Painel .

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 );
Vladan
fonte