Czy ktoś wie, jak dodać separator menu administratora? Znalazłem to, ale to nie pomogło.
Jakieś pomysły?
Czy ktoś wie, jak dodać separator menu administratora? Znalazłem to, ale to nie pomogło.
Jakieś pomysły?
Odpowiedzi:
Oto szybki i brudny sposób na zdobycie tego, czego chcesz.
WordPress przechowuje sekcje menu administratora w globalnej tablicy o nazwie $menu
. Aby dodać separator, dodajesz element do $menu
tablicy za pomocą indeksu znajdującego się między indeksami opcji, które chcesz oddzielić.
add_admin_menu_separator()
funkcjiNapisałem więc funkcję do enkapsulacji logiki tego, co wywołałem add_admin_menu_separator()
. Musisz wybrać numer indeksu tablicy, który jest wyższy niż opcja, po której chcesz dodać separator, a następnie wywołać funkcję add_admin_menu_separator()
przekazującą ten indeks jako parametr.
Na przykład:
add_admin_menu_separator(37);
add_admin_menu_separator()
funkcjaOto definicja funkcji, add_admin_menu_separator()
którą można skopiować do functions.php
pliku motywu . Tak, jest tajemny, ale tak samo jest z kodem, który tworzy i używa globalnej $menu
tablicy. (Na szczęście planujemy go wycofać, na szczęście, ale to prawdopodobnie potrwa kilka lat).
function add_admin_menu_separator($position) {
global $menu;
$index = 0;
foreach($menu as $offset => $section) {
if (substr($section[2],0,9)=='separator')
$index++;
if ($offset>=$position) {
$menu[$position] = array('','read',"separator{$index}",'','wp-menu-separator');
break;
}
}
ksort( $menu );
}
$menu
, że trzebaAby dowiedzieć się, co trzeba numer indeksu można zrobić var_dump()
z $GLOBALS['menu']
od wewnątrz admin_init
haka. Oto trochę kodu, który możesz functions.php
tymczasowo upuścić do pliku motywu, aby zobaczyć, jakie są wartości. Będzie to działać tylko w przypadku żądania adresu URL rozpoczynającego się od /wp-admin/
(ale pamiętaj, aby zrobić z FTP, a nie z wbudowanym edytorem motywów, inaczej stracisz dostęp do swojej witryny, przynajmniej do momentu uzyskania dostępu FTP do functions.php
pliku motywu !) :
add_action('admin_init','dump_admin_menu');
function dump_admin_menu() {
if (is_admin()) {
header('Content-Type:text/plain');
var_dump($GLOBALS['menu']);
exit;
}
}
BTW, te linki mogą być przydatne ogólnie do pracy z menu administracyjnymi:
Chociaż moje klasy menu administratora nie oferują obecnie łatwego sposobu dodawania separatorów, myślę, że dodam je teraz, kiedy będę miał czas.
To proste jak:
add_action( 'admin_init', 'add_sep' );
function add_sep() {
if ( ! is_admin() )
return false;
global $menu;
$sep = $menu[4]; // that's the default separator
$pos = 6; // change it for the desired position
$menu = array_merge(
array_slice( $menu, 0, $pos ),
array( $sep ),
array_slice( $menu, $pos + 1, -1)
);
$menu[ $pos - 1 ][4] .= ' menu-top-last';
$menu[ $pos + 1 ][4] .= ' menu-top-first';
}
Uwaga: Domyślna pozycja separatora ( $menu[4]
) może być różna w zależności od konfiguracji, którą wykonałeś (lub twoje wtyczki) przed tym hakiem.
Oczywiście możesz również dostosować introspekcję menu-top-first
i menu-top-last
klasy.
Niektóre problemy z brakiem dodawania separatorów wynikały ze sposobu, w jaki wordpress usuwa zduplikowane separatory. Dodanie ksort($menu);
na dole funkcji rozwiązało problem.
Opiera się to na odpowiedzi MastaBaba, ale niczego nie zastępuje w określonej przez Ciebie pozycji - po prostu dodaje separator.
Używa także anonimowej funkcji, więc jest kompatybilna tylko z PHP w wersji 5.3 i wyższej.
add_action( 'admin_menu', function () {
$position = 29;
global $menu;
$separator = [
0 => '',
1 => 'read',
2 => 'separator' . $position,
3 => '',
4 => 'wp-menu-separator'
];
if (isset($menu[$position])) {
$menu = array_splice($menu, $position, 0, $separator);
} else {
$menu[$position] = $separator;
}
});
Trochę trudno jest ustalić, co próbujesz zrobić, ale myślę, że chcesz dodać pozycję najwyższego poziomu w menu administracyjnym WordPress.
Zobacz tę dokumentację w Kodeksie WordPress.
Krótko mówiąc, szukasz użycia add_menu_page()
funkcji, która pobiera wiele argumentów i wyświetla dodatkowy element w menu administracyjnym jako rodzeństwo „Dashboard”, „Posty”, „Media” itp.
Mam nadzieję, że dobrze to zrozumiałem. :-)
add_menu_page()
.
Poniżej zamieszczono akcję do Wordpress, która jest uruchamiana po wyświetleniu menu administratora. Menu administratora to tablica i wszystko, co tutaj robisz, polega na dodaniu elementu tablicy, który definiuje separator, w określonej przez ciebie pozycji.
Od tutaj :
add_action( 'admin_menu', 'set_admin_menu_separator' );
function set_admin_menu_separator() {
$position = 79;
global $menu;
$menu[$position] = array(
0 => '',
1 => 'read',
2 => 'separator' . $position,
3 => '',
4 => 'wp-menu-separator'
);
}
Zauważ, że chociaż to raczej przypomina obecnie akceptowaną odpowiedź, obecnie zaakceptowana odpowiedź nie działała dla mnie (i sądząc po komentarzach, dla kilku innych).