Umieszczanie niestandardowego menu typu posta nad menu postów Korzystając z menu_pozycja?


Odpowiedzi:


14

Pozycje dla pozycji menu głównego

  • 2 Pulpit nawigacyjny
  • 4 Separator
  • 5 postów
  • 10 mediów
  • 15 linków
  • 20 stron
  • 25 komentarzy
  • 59 Separator
  • 60 Wygląd
  • 65 wtyczek
  • 70 użytkowników
  • 75 Narzędzia
  • 80 Ustawienia
  • 99 Separator

Opis parametrów dla „pozycji menu”

$position( liczba całkowita ) ( opcjonalnie ) Pozycja w kolejności menu to menu powinno się pojawić. Domyślnie, jeśli ten parametr zostanie pominięty, menu pojawi się na dole struktury menu. Im wyższy numer, tym niższa pozycja w menu.

UWAGA: jeśli dwa elementy menu używają tego samego atrybutu pozycji, jeden z elementów może zostać nadpisany, tak że wyświetla się tylko jeden element! Ryzyko konfliktu można zmniejszyć, stosując wartości dziesiętne zamiast liczb całkowitych, np. 63,3 zamiast 63.

Domyślnie: dół struktury menu


4

Nowa wtyczka JetPack umieszcza link menu bezpośrednio pod linkiem Dashboard. Robi to, ustawiając kolejność menu na 0, filtrując tablicę $ 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;
    }

Z ciekawości, co by się stało, gdybyś spróbował 0 jako menu_pozycja?


2

Użyłem „menu_postion” => 0, 1,2,3,4.

To naprawdę nie ma znaczenia. Jeśli się z tym bawisz, możesz łatwo to rozgryźć.

Użycie „menu_position” => 1 powinno umieścić go pod pozycją menu Dashboard nad separatorem. 0 Powinien umieścić go nad deską rozdzielczą


2

Szukasz rozwiązania w Internecie, ale nie znalazłem. Po prostu robi to podstęp (na przykład). Oto natywna lista pozycji:

  • 2 Pulpit nawigacyjny
  • 4 Separator
  • 5 postów
  • 10 mediów
  • 15 linków
  • 20 stron
  • 25 komentarzy
  • 59 Separator
  • 60 Wygląd
  • 65 wtyczek
  • 70 użytkowników
  • 75 Narzędzia
  • 80 Ustawienia
  • 99 Separator

Jeśli masz więcej elementów, możesz odczytać aktualną pozycję dla każdego elementu, drukując globalne menu $:

global $menu; 
print_r($menu); 

Więc jeśli dobrze rozumiem, nic nie może nam przeszkodzić w ponownym zamówieniu menu tak, jak chcemy:

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

Działa to dla mnie dobrze, więc myślę, że to uzasadnione, czy się mylę?


Bardzo kruche rozwiązanie oparte na magicznych liczbach . Zepsuje się, gdy tylko zostanie dodana / usunięta inna wtyczka, która umieszcza element wśród innych.
Walf


1

Możesz użyć tego:

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

Teraz możesz użyć pozycji 5, aby dodać menu powyżej menu Opublikuj.


To mi nie zadziałało. Umieściłem go w mojej wtyczce sitewide, gdzie jest mój plik custom-post-type.php
Daniel

1

oto zastrzeżenie do całego wydania ...

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; 

POUCZENIE: musi być liczbą całkowitą i NIE jest już ustawiona, w przeciwnym razie znajdzie się na dole listy.


1

W przypadku działającego rozwiązania w WordPress 5 i niższych, zmień jego położenie za pomocą następującego kodu:

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

Zakłada się, że nie masz więcej niż jednego elementu menu rywalizującego o pole position.


0

Pod tym samym linkiem, który podlinkowałeś, czytamy:

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

Tak więc, jeśli ustawisz menu_positioncoś podobnego 4, powinien on umieścić go nad postami.

Pozycja -1umieszcza go nad Dashboardlinkiem.


Próbowałem 4, ale dokładnie tak samo jak 5.
janoChen

Hmm. Próbowałeś 1-3? Myślę, że być może „1” (lub „0”) to pulpit nawigacyjny. Być może zadziałałoby coś 2-3
Zack

0 1 2 3 Idzie przed deski rozdzielczej i 4 Idzie poniżej postów. Jest naprawdę niemożliwe!
janoChen

Łał. złamał dużo WordPress? Nie wiem wtedy. : - /
Zack

Myślę, że 4 to separator tuż nad postami, a 5 to posty, więc jeśli ustawisz pozycję menu na 3, będzie to tuż przed separatorem. Oczywiście z domyślną konfiguracją. Ustawienie mojej strony wtyczki na 4 zastąpiło separator, ale pojawiło się tuż nad postami. hmmm ...
goldenapples

0

Możesz użyć wartości dziesiętnych (jako ciągów). Na przykład mam kilka niestandardowych typów postów, które umieściłem na ostatniej pozycji w menu (100001, 100002, 100003).

Następnie po prostu umieść ten kod, aby przenieść je nad posty i poniżej elementów menu pulpitu nawigacyjnego .

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 );
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.