web-dev-qa-db-fra.com

Placer un menu de type message personnalisé au-dessus du menu Messages Utilisation de menu_position?

Je viens de comprendre le paramètre menu_position il semble que vous puissiez placer le menu de votre type de message personnalisé presque partout. Sauf au-dessus du menu des messages!

Comment puis-je accomplir cela?

16
janoChen

Positions pour les éléments du menu principal

  • 2 tableau de bord
  • 4 séparateur
  • 5 messages
  • 10 médias
  • 15 liens
  • 20 pages
  • 25 commentaires
  • 59 séparateur
  • 60 apparence
  • 65 plugins
  • 70 utilisateurs
  • 75 outils
  • 80 réglages
  • 99 séparateur

Description du paramètre "Position du menu"

$position ( entier ) (facultatif) La position dans l'ordre du menu dans laquelle ce menu devrait apparaître. Par défaut, si ce paramètre est omis, le menu apparaîtra au bas de la structure du menu. Plus le nombre est élevé, plus sa position dans le menu est basse.

AVERTISSEMENT: si deux éléments de menu utilisent le même attribut de position, l'un des éléments peut être écrasé de sorte qu'un seul élément s'affiche! Le risque de conflit peut être réduit en utilisant des valeurs décimales au lieu de valeurs entières, par ex. 63,3 au lieu de 63.

Par défaut: bas de la structure du menu

13
Michael Ecklund

Le nouveau plug-in JetPack place son lien de menu immédiatement sous le lien de tableau de bord. Il le fait en en mettant son ordre de menu à 0, en filtrant le tableau $ 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;
    }

Par curiosité, que se passerait-il si vous essayiez 0 comme menu_position?

4
Chip Bennett

C'est un bug dans WordPress. S'il vous plaît voir ce fil dans Trac: http://core.trac.wordpress.org/ticket/14755

Fixé dans 4.4 ...

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

2
Merne

J'ai utilisé 'menu_postion' => 0, 1,2,3,4.

Peu importe vraiment. Si vous jouez avec cela, vous pouvez facilement le comprendre.

Utiliser 'menu_position' => 1 devrait le placer sous l’option de menu Tableau de bord au-dessus du séparateur. 0 devrait le placer au-dessus du tableau de bord

2
jaredwilli

Vous cherchez une solution sur le web mais vous n’avez pas trouvé. Fait simplement cette astuce (par exemple). Ici vous avez la liste native des postes:

  • 2 tableau de bord
  • 4 séparateur
  • 5 messages
  • 10 médias
  • 15 liens
  • 20 pages
  • 25 commentaires
  • 59 séparateur
  • 60 apparence
  • 65 plugins
  • 70 utilisateurs
  • 75 outils
  • 80 réglages
  • 99 séparateur

Si vous avez plus d'éléments, vous pouvez lire la position actuelle de chaque élément en imprimant le menu $ global:

global $menu; 
print_r($menu); 

Donc, si je comprends bien, rien ne peut nous empêcher de réorganiser le menu comme nous le souhaitons:

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

Cela fonctionne bien pour moi alors, je pense que c'est légitime, je me trompe?

2
Nolan Crochot

voici la mise en garde à toute la question ...

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; 

AVIS: doit être un entier et NON déjà défini, sinon il va au bas de la liste.

1
Artistan

Vous pouvez utiliser ceci:

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

Vous pouvez maintenant utiliser la position 5 pour ajouter votre menu au-dessus du menu Publier.

1
eduardogoncalves

Sur le même lien que vous avez lié, on peut lire:

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

Donc, si vous définissez menu_position à quelque chose comme 4, alors il devrait le mettre au-dessus des publications.

Une position de -1 le place au-dessus du lien Dashboard.

1
Zack

Pour une solution de travail dans WordPress 4.9, définissez le menu_position de votre CPT sur 6, supérieur à Posts ', puis échangez-les avec le code suivant:

add_filter('custom_menu_order', '__return_true');
add_filter('menu_order', function($menu_order) {
    $k = array_search($v = 'edit.php', $menu_order);
    $menu_order[$k] = $menu_order[$k + 1];
    $menu_order[$k + 1] = $v;
    return $menu_order;
});

Cela suppose que vous n'avez pas plus d'un élément de menu en lice pour la pole position.

1
Walf

Vous pouvez utiliser des valeurs décimales (sous forme de chaînes). Par exemple, j'ai quelques types de publication personnalisés que j'ai placés à la dernière position du menu (100001, 100002, 100003).

Ensuite, il suffit de mettre ce code pour les déplacer au-dessus de Posts et au-dessous de Tableau de bord éléments de menu.

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