Platzieren eines benutzerdefinierten Beitragstypmenüs über dem Beitragsmenü Verwenden Sie menu_position?

Antworten:

14

Positionen für Hauptmenüpunkte

  • 2 Dashboard
  • 4 Trennzeichen
  • 5 Beiträge
  • 10 Medien
  • 15 Links
  • 20 Seiten
  • 25 Kommentare
  • 59 Abscheider
  • 60 Aussehen
  • 65 Plugins
  • 70 Benutzer
  • 75 Werkzeuge
  • 80 Einstellungen
  • 99 Abscheider

Parameterbeschreibung für "Menüposition"

$position( Ganzzahl ) ( optional ) Die Position in der Menüreihenfolge, in der dieses Menü angezeigt werden soll. Wenn dieser Parameter nicht angegeben wird, wird das Menü standardmäßig am unteren Rand der Menüstruktur angezeigt. Je höher die Zahl, desto niedriger ist die Position im Menü.

WARNUNG: Wenn zwei Menüelemente dasselbe Positionsattribut verwenden, wird möglicherweise eines der Elemente überschrieben, sodass nur ein Element angezeigt wird! Das Konfliktrisiko kann durch die Verwendung von Dezimalzahlen anstelle von Ganzzahlen verringert werden, z. B. 63,3 anstelle von 63.

Voreinstellung: Ende der Menüstruktur

Michael Ecklund
quelle
4

Das neue JetPack-Plugin platziert seinen Menülink direkt unter dem Dashboard-Link. Dazu wird die Menüreihenfolge auf 0 gesetzt und das Array $ menu_order gefiltert :

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

Was würde aus Neugier passieren, wenn Sie 0 als menu_position versuchen würden?

Chip Bennett
quelle
2

Ich habe 'menu_postion' => 0, 1,2,3,4 verwendet.

Ist eigentlich egal. Wenn Sie damit herumspielen, können Sie es leicht herausfinden.

Mit 'menu_position' => 1 sollte es unter dem Dashboard-Menüpunkt über dem Trennzeichen platziert werden. 0 Sollte über dem Dashboard platziert werden

jaredwilli
quelle
2

Auf der Suche nach einer Lösung im Web, aber nicht gefunden. Macht einfach diesen Trick (zum Beispiel). Hier haben Sie die native Liste der Positionen:

  • 2 Dashboard
  • 4 Trennzeichen
  • 5 Beiträge
  • 10 Medien
  • 15 Links
  • 20 Seiten
  • 25 Kommentare
  • 59 Abscheider
  • 60 Aussehen
  • 65 Plugins
  • 70 Benutzer
  • 75 Werkzeuge
  • 80 Einstellungen
  • 99 Abscheider

Wenn Sie mehr Elemente haben, können Sie die aktuelle Position für jedes Element lesen, indem Sie das globale $ -Menü drucken:

global $menu; 
print_r($menu); 

Wenn ich das gut verstehe, kann uns nichts daran hindern, das Menü so neu zu bestellen, wie wir es möchten:

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

Es funktioniert gut für mich, ich denke das ist echt, ich irre mich?

Nolan Crochot
quelle
Sehr fragile Lösung, die auf magischen Zahlen beruht . Es würde brechen, sobald ein anderes Plugin hinzugefügt / entfernt wird, das einen Gegenstand unter den anderen platziert.
Walf
1

Sie können dies verwenden:

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

Jetzt können Sie Position 5 verwenden, um Ihr Menü über dem Post-Menü hinzuzufügen.

eduardogoncalves
quelle
Das hat bei mir nicht geklappt. Ich habe es in mein Sitewide-Plugin eingefügt, in dem sich meine Datei custom-post-type.php befindet
Daniel
1

Hier ist der Vorbehalt zu der ganzen Ausgabe ...

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; 

HINWEIS: muss eine Ganzzahl sein und darf noch NICHT gesetzt sein, sonst steht sie ganz unten in der Liste.

Artistan
quelle
1

Positionieren Sie eine funktionierende Lösung in WordPress 5 und darunter mit dem folgenden Code neu:

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

Dies setzt voraus, dass Sie nicht mehr als einen Menüpunkt haben, der um die Pole-Position kämpft.

Walf
quelle
0

Auf demselben Link, den Sie verlinkt haben, heißt es:

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

Wenn Sie also menu_positionso etwas einstellen , 4sollte es über den Posts stehen.

Eine Position von -1setzt es über den DashboardLink.

Zack
quelle
Ich habe 4 ausprobiert, aber es ist genau das gleiche wie 5.
janoChen
Hrm. Versucht 1-3? Ich denke, vielleicht ist "1" (oder "0") das Dashboard. Vielleicht würde etwas 2-3 funktionieren
Zack
0 1 2 3 Geht vor dem Dashboard und 4 Geht unter Beiträge. Ist wirklich unmöglich!
janoChen
Beeindruckend. kaputt viel WordPress? Ich weiß es nicht. : - /
Zack
Ich denke, dass 4 das Trennzeichen direkt über Posts ist und 5 Posts. Wenn Sie also Ihre Menüposition auf 3 setzen, steht es direkt vor dem Trennzeichen. Bei Standardkonfiguration natürlich. Das Setzen meiner Plugin-Seite auf 4 hat das Trennzeichen überschrieben, wurde jedoch direkt über Posts angezeigt. hmmm ...
goldenapples
0

Sie können Dezimalwerte (als Zeichenfolgen) verwenden. Beispielsweise habe ich einige benutzerdefinierte Beitragstypen, die ich an der letzten Position im Menü platziert habe (100001, 100002, 100003).

Fügen Sie dann einfach diesen Code ein, um sie über Beiträge und unter Dashboard- Menüelemente zu verschieben.

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
quelle