Właśnie wymyśliłem parametr menu_position . Wygląda na to, że możesz umieścić menu swojego niestandardowego typu posta prawie wszędzie. Z wyjątkiem menu powyżej postów!
Jak mogę to osiągnąć?
Właśnie wymyśliłem parametr menu_position . Wygląda na to, że możesz umieścić menu swojego niestandardowego typu posta prawie wszędzie. Z wyjątkiem menu powyżej postów!
Jak mogę to osiągnąć?
Odpowiedzi:
Pozycje dla pozycji menu głównego
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
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?
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ą
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ę?
To jest błąd w WordPress. Zobacz ten wątek w Trac: http://core.trac.wordpress.org/ticket/14755
Naprawiono w 4.4 ...
https://developer.wordpress.org/reference/functions/add_menu_page/#notes
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.
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.
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.
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_position
coś podobnego 4
, powinien on umieścić go nad postami.
Pozycja -1
umieszcza go nad Dashboard
linkiem.
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 );