Placer un menu de type de publication personnalisé au-dessus du menu des publications À l'aide de menu_position?

17

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 Posts!

Comment puis-je y parvenir?

janoChen
la source
Bonne question, il semble que c'est le seul endroit où il n'ira pas.
jnthnclrk

Réponses:

14

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 paramètres
  • 99 Séparateur

Description des paramètres pour "position du menu"

$position( entier ) ( facultatif ) La position dans l'ordre du menu ce menu devrait apparaître. Par défaut, si ce paramètre est omis, le menu apparaîtra en 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 remplacé afin 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 exemple 63,3 au lieu de 63.

Par défaut: bas de la structure du menu

Michael Ecklund
la source
4

Le nouveau plugin JetPack place son lien de menu juste en dessous du lien Dashboard. Il le fait en définissant 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?

Chip Bennett
la source
2

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

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

L'utilisation de 'menu_position' => 1 devrait le placer sous l'élément de menu Dashboard au-dessus du séparateur. 0 Devrait le placer au-dessus du tableau de bord

jaredwilli
la source
2

Vous cherchez une solution sur le web mais vous ne l'avez pas trouvée. Fait simplement cette astuce (par exemple). Voici 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 paramètres
  • 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, donc, je pense que c'est légitime, je me trompe?

Nolan Crochot
la source
Solution très fragile qui repose sur des nombres magiques . Il se briserait dès qu'un autre plugin est ajouté / supprimé qui place un élément parmi les autres.
Walf
1

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 Post.

eduardogoncalves
la source
Cela n'a pas fonctionné pour moi. Je l'ai placé dans mon plugin sur tout le site où se trouve mon fichier custom-post-type.php
Daniel
1

voici l'avertissement à 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 PAS déjà défini, sinon il va au bas de la liste.

Artistan
la source
1

Pour une solution de travail dans WordPress 5 et versions antérieures, repositionnez-la avec le code suivant:

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

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

Walf
la source
0

Sur le même lien que vous avez lié, il se lit:

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_positionquelque chose comme 4, il devrait le placer au-dessus des messages.

Une position de le -1place au-dessus du Dashboardlien.

Zack
la source
J'ai essayé 4 mais c'est exactement la même chose que 5.
janoChen
Hrm. Vous avez essayé 1-3? Je pense que "1" (ou "0") est peut-être le tableau de bord. Peut-être que quelque chose 2-3 fonctionnerait
Zack
0 1 2 3 Va avant le tableau de bord et 4 va sous les messages. C'est vraiment impossible!
janoChen
Sensationnel. cassé beaucoup WordPress? Je ne sais pas alors. : - /
Zack
Je pense que 4 est le séparateur juste au-dessus des messages, et 5 est les messages, donc si vous définissez votre position de menu sur 3, ce sera juste avant le séparateur. Avec la configuration par défaut bien sûr. Définir ma page de plug-in sur 4 a remplacé le séparateur, mais est apparu juste au-dessus des messages. hmmm ...
goldenapples
0

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

Ensuite, placez simplement ce code pour les déplacer au-dessus des messages et en dessous des éléments de menu du tableau de bord .

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
la source