it-swarm.com.de

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

Ich habe gerade den Parameter menu_position herausgefunden Sie können das Menü Ihres benutzerdefinierten Beitragstyps anscheinend fast überall platzieren. Außer über dem Beitragsmenü!

Wie kann ich das erreichen?

16
janoChen

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 ( integer ) (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 Verwendung von Dezimalwerten anstelle von Ganzzahlwerten, z. 63,3 statt 63.

Standard: Ende der Menüstruktur

13
Michael Ecklund

Das neue JetPack-Plugin platziert seinen Menülink direkt unter dem Dashboard-Link. Dies geschieht durch Setzen der Menüreihenfolge auf 0, indem das Array $ menu_order gefiltert wird :

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?

4
Chip Bennett

Dies ist ein Fehler in WordPress. Bitte sehen Sie diesen Thread in Trac: http://core.trac.wordpress.org/ticket/14755

Behoben in 4.4 ...

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

2
Merne

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

2
jaredwilli

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, hindert uns nichts daran, das Menü so 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?

2
Nolan Crochot

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.

1
Artistan

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.

1

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_position auf so etwas wie 4 setzen, sollte es über den Posts stehen.

Eine Position von -1 setzt es über den Link Dashboard.

1
Zack

Setzen Sie für eine funktionierende Lösung in WordPress 4.9 den menu_position Ihres CPT auf 6, einen höheren Wert als Posts ', und tauschen Sie sie mit dem folgenden Code aus:

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

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

1
Walf

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