Posizionare un Menu di Tipo di Post Personalizzato Sopra il Menu Post Usando menu_position

7 feb 2011, 20:38:05
Visualizzazioni: 37.9K
Voti: 27

Ho appena scoperto il parametro menu_position e sembra che si possa posizionare il menu del tipo di post personalizzato quasi ovunque. Tranne che sopra il menu Post!

Come posso ottenere questo risultato?

1
Commenti

Buona domanda, sembra che sia l'unico posto dove non andrà.

jnthnclrk jnthnclrk
29 ago 2013 15:44:36
Tutte le risposte alla domanda 10
1
31

Posizioni per le voci di menu principali

  • 2 Dashboard
  • 4 Separatore
  • 5 Articoli
  • 10 Media
  • 15 Collegamenti
  • 20 Pagine
  • 25 Commenti
  • 59 Separatore
  • 60 Aspetto
  • 65 Plugin
  • 70 Utenti
  • 75 Strumenti
  • 80 Impostazioni
  • 99 Separatore

Descrizione del parametro per "posizione menu"

$position (integer) (opzionale) La posizione nell'ordine del menu dove questa voce dovrebbe apparire. Di default, se questo parametro è omesso, la voce apparirà in fondo alla struttura del menu. Più alto è il numero, più in basso sarà la sua posizione nel menu.

ATTENZIONE: se due voci di menu usano lo stesso attributo di posizione, una delle voci potrebbe essere sovrascritta così che solo una voce viene visualizzata! Il rischio di conflitto può essere ridotto usando valori decimali invece di interi, es. 63.3 invece di 63.

Default: fondo della struttura del menu

21 set 2012 04:53:09
Commenti

Come usare i decimali in 'menu_position' =>3,? Voglio usare la posizione=3 per molti tipi di post personalizzati.

Bikram Bikram
4 feb 2020 11:19:05
0

Il nuovo plugin JetPack posiziona il suo collegamento di menu immediatamente sotto il collegamento alla Dashboard. Lo fa impostando l'ordine del menu a 0, filtrando l'array $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;
    }

Per curiosità, cosa succederebbe se provassi a usare 0 come menu_position?

28 mar 2011 22:42:15
1

Stavo cercando una soluzione sul web ma non ho trovato nulla. Ecco un semplice trucco (ad esempio). Qui hai la lista nativa delle posizioni:

  • 2 Dashboard
  • 4 Separatore
  • 5 Articoli
  • 10 Media
  • 15 Link
  • 20 Pagine
  • 25 Commenti
  • 59 Separatore
  • 60 Aspetto
  • 65 Plugin
  • 70 Utenti
  • 75 Strumenti
  • 80 Impostazioni
  • 99 Separatore

Se hai più elementi, puoi leggere la posizione corrente per ogni elemento stampando la variabile globale $menu:

global $menu; 
print_r($menu); 

Quindi, se ho capito bene, nulla ci impedisce di riordinare il menu come vogliamo:

function re_order_menu () {
    // ------- Sposta gli elementi 
    $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];

    // -------- Resetta il 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]);

    // -------- Riordina il menu come preferisci
    $dashboard = $menu[2];
    $separator1 = $menu[4];
    $posts = $menu[5];
    $books = $menu[6];
    /* i miei numerosi elementi personalizzati */
    $authors  = $menu[7];
    $requests = $menu[8];
    $clients = $menu[9];
    $sellers  = $menu[10];
    $services = $menu[11];
    $schedules = $menu[12];
    /* lascia un po' di spazio dopo */ 
    $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');

Funziona bene per me, quindi penso che sia legittimo, mi sbaglio?

18 mag 2017 01:09:43
Commenti

Soluzione molto fragile che si basa su numeri magici. Smetterebbe di funzionare non appena viene aggiunto/rimosso un altro plugin che inserisce un elemento tra gli altri.

Walf Walf
13 nov 2019 01:19:02
0

Ho utilizzato 'menu_position' => 0, 1, 2, 3, 4.

In realtà non ha molta importanza. Se ci giochi un po', puoi capirlo facilmente.

Usare 'menu_position' => 1 dovrebbe posizionarlo sotto la voce del menu Dashboard sopra il separatore. 0 dovrebbe posizionarlo sopra la Dashboard

23 feb 2011 03:12:04
0

Questo è un bug in WordPress. Si prega di vedere questa discussione in Trac: http://core.trac.wordpress.org/ticket/14755

Risolto nella versione 4.4...

https://developer.wordpress.org/reference/functions/add_menu_page/#note

6 set 2012 21:41:55
1

Puoi utilizzare questo codice:

function my_move_post () {
    global $menu;
    $menu[6] = $menu[5]; //sposta il post dalla posizione 5 alla 6
    unset($menu[5]); //libera la posizione 5 così puoi usarla!
}
add_action('admin_menu', 'my_move_post');

Ora puoi utilizzare la posizione 5 per aggiungere il tuo menu sopra al menu Articoli.

19 dic 2013 16:33:09
Commenti

Non ha funzionato per me. L'ho inserito nel mio plugin globale dove si trova il mio file custom-post-type.php

Daniel Daniel
14 ago 2014 19:19:04
0

ecco l'avvertenza sull'intera questione...

WordPress 4.9.2

wp-admin/menu.php:

// Se dobbiamo usare $_wp_last_object_menu, incrementiamolo prima.
$ptype_menu_position = is_int( $ptype_obj->menu_position ) ? $ptype_obj->menu_position : ++$_wp_last_object_menu;

NOTA: deve essere un numero intero e NON già impostato, altrimenti va in fondo alla lista.

20 gen 2018 17:41:02
0

Per una soluzione funzionante in WordPress 5 e versioni precedenti, riposiziona il menu con il seguente codice:

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

Questo presuppone che non ci sia più di una voce di menu che cerca di posizionarsi in prima posizione.

21 ago 2018 16:28:31
5

Sul link che hai fornito, si legge:

menu_position
(integer) (opzionale) La posizione nell'ordine del menu in cui dovrebbe apparire il post type.
Valore predefinito: null - di default viene posizionato sotto Commenti
5 - sotto Articoli
10 - sotto Media
20 - sotto Pagine
60 - sotto il primo separatore
100 - sotto il secondo separatore

Quindi, se imposti menu_position a un valore come 4, dovrebbe posizionarlo sopra gli Articoli.

Una posizione di -1 lo posiziona sopra il link Dashboard.

7 feb 2011 20:53:54
Commenti

Ho provato 4 ma è esattamente lo stesso di 5.

wyc wyc
7 feb 2011 21:23:41

Hmm. Hai provato 1-3? Penso che forse "1" (o "0") sia la Dashboard. Forse qualcosa tra 2-3 potrebbe funzionare

Zack Zack
7 feb 2011 22:32:04

0 1 2 3 Vanno prima della Dashboard e 4 va sotto Post. È davvero impossibile!

wyc wyc
8 feb 2011 07:44:43

Wow. WordPress è rotto? Non lo so allora. :-/

Zack Zack
8 feb 2011 07:52:25

Penso che il 4 sia il separatore appena sopra Articoli, e il 5 sia Articoli, quindi se imposti la tua menu-position a 3 sarà appena prima del separatore. Con la configurazione predefinita ovviamente. Impostando la pagina del mio plugin a 4 ho sovrascritto il separatore, ma è apparso appena sopra Articoli. hmmm...

goldenapples goldenapples
28 mar 2011 22:50:43
0

Puoi utilizzare valori decimali (come stringhe). Ad esempio, ho alcuni tipi di post personalizzati che ho posizionato all'ultima posizione nel menu (100001, 100002, 100003).

Quindi, inserisci questo codice per spostarli sopra le Voci e sotto la voce del menu Bacheca.

function reorder_admin_menu() {

  global $menu;

  // Aggiungi un separatore

  $menu["3.1"] = array(
    0 =>  '',
    1 =>  'read',
    2 =>  'separator_' . "anything_unique",
    3 =>  '',
    4 =>  'wp-menu-separator'
    );

  // Ho posizionato le mie voci di menu alla fine (esattamente questi valori), quindi le sposto più in alto

  $menu["3.2"] = $menu[100001];
  $menu["3.3"] = $menu[100002];
  $menu["3.4"] = $menu[100003];

  unset($menu[100001]);
  unset($menu[100002]);
  unset($menu[100003]);

  // Sposta la voce del menu Media (posizione 10) all'inizio, nello stesso gruppo
  $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 );
25 nov 2015 21:09:52