Adăugarea unui Separator în Meniul de Administrare
Știe cineva cum să adauge un separator în meniul de administrare? Am găsit acest articol dar nu m-a ajutat.
Aveți vreo idee?

Iată o metodă rapidă și simplă pentru a obține ceea ce dorești.
Context
WordPress stochează secțiunile din meniul de administrare într-un array global numit $menu
. Pentru a adăuga un separator, adaugi un element în array-ul $menu
folosind un index care se află între indexurile opțiunilor pe care dorești să le separi.
Folosind funcția add_admin_menu_separator()
Am scris o funcție care încapsulează această logică, numită add_admin_menu_separator()
. Va trebui să alegi un număr de index din array care este mai mare decât opțiunea după care dorești să adaugi un separator, apoi să apelezi funcția add_admin_menu_separator()
transmitând acel index ca parametru.
De exemplu:
add_admin_menu_separator(37);
Funcția add_admin_menu_separator()
în sine
Iată definiția funcției add_admin_menu_separator()
pe care o poți copia în fișierul functions.php
al temei tale. Da, este puțin obscură, dar la fel este și codul care creează și folosește array-ul global $menu
. (Există planuri de a-l înlocui într-o bună zi, din fericire, dar probabil va mai dura câțiva ani.)
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 );
}
Găsirea indexului necesar în $menu
Pentru a afla ce număr de index ai nevoie, poți folosi var_dump()
pe $GLOBALS['menu']
dintr-un hook admin_init
. Iată un fragment de cod pe care îl poți adăuga temporar în fișierul functions.php
al temei tale pentru a vedea care sunt valorile. Acest cod va funcționa doar atunci când accesezi un URL care începe cu /wp-admin/
(dar asigură-te că faci asta prin FTP și nu prin editorul de teme integrat, altfel vei pierde accesul la site până când vei putea accesa din nou fișierul functions.php
prin FTP!):
add_action('admin_init','dump_admin_menu');
function dump_admin_menu() {
if (is_admin()) {
header('Content-Type:text/plain');
var_dump($GLOBALS['menu']);
exit;
}
}
Vezi și:
Apropo, aceste link-uri pot fi utile pentru lucrul cu meniurile de administrare:
- Schimbarea ordinii secțiunilor din meniul de administrare
- Ultima versiune:
wp-admin-menu-classes.php
Deși clasele mele pentru meniul de administrare nu oferă în prezent o modalitate ușoară de a adăuga separatori, cred că voi adăuga această funcționalitate când voi avea timp.

Mulțumesc Mike, am verificat toată noaptea studiind variabila globală menu, dar nu am reușit să adaug un separator, acum îmi este mult mai clar cum funcționează meniurile în wp.

Salut @user1147: Da, sunt foarte greu de înțeles. Când a trebuit prima dată să mă ocup de ele, mi-a luat foarte mult timp, și încă mai am dificultăți. De aceea am scris acele funcții, ca să le pot face mai ușor de acum încolo! Oricum, mă bucur că răspunsul meu a fost de ajutor.

@MikeSchinkel Această metodă nu funcționează pentru mine în Wordpress 3.3.1.

Tocmai am testat și "funcționează" în versiunea 4.5, dar WordPress a decis să elimine liniile, așa că pur și simplu nu mai apar. Cred că soluția ar fi să adăugăm CSS, dar nu pot să-mi dau seama ce CSS să adaug, deoarece sunt dezvoltator pe partea de backend și nu mă descurc cu CSS-ul. Poate cineva altcineva poate să sugereze?

@MikeSchinkel acea problemă a fost rezolvată acum. Codul sugerat ar seta separatorul la indexul specificat, dar dacă adăugăm un zgomot aleatoriu la index acesta nu va fi înlocuit — deoarece 37.4345
nu este 37
:)

Este la fel de ușor ca:
add_action( 'admin_init', 'add_sep' );
function add_sep() {
if ( ! is_admin() )
return false;
global $menu;
$sep = $menu[4]; // acesta este separatorul implicit
$pos = 6; // schimbați-l pentru poziția dorită
$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';
}
Notă: Poziția separatorului implicit ($menu[4]
) poate fi diferită în funcție de configurația pe care ați făcut-o (sau plugin-urile dvs.) înainte de acest hook.
Desigur, puteți ajusta și introspecția claselor menu-top-first
și menu-top-last
.

Puteți adăuga pur și simplu acest cod în fișierul functions.php
add_action('admin_menu', function () {
global $menu;
$menu[49] = ['', 'read', '', '', 'wp-menu-separator'];
});
Unde 49 reprezintă poziția separatorului, trebuie să țineți cont că poziția separatorului poate înlocui un element din meniu dacă acesta are aceeași poziție.

Acest exemplu se bazează pe răspunsul lui MastaBaba, dar nu înlocuiește nimic pe poziția specificată - doar adaugă separatorul după aceea.
De asemenea, utilizează o funcție anonimă, așa că este compatibil doar cu versiunile PHP 5.3 și mai noi.
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;
}
});

Este puțin greu de determinat exact ce încerci să faci, dar cred că vrei să adaugi o intrare principală în meniul de administrare WordPress.
Vezi această documentație în WordPress Codex.
Pe scurt, cauți utilizarea funcției add_menu_page()
, care primește mai multe argumente și afișează un element adițional în meniul administrativ, alături de "Panou de control", "Articole", "Media", etc.
Sper că am înțeles corect. :-)

Mai jos este adăugată o acțiune în WordPress care este executată când meniul de administrare este afișat. Meniul de administrare este un array și tot ce faci aici este să adaugi un element de array care definește un separator, în poziția pe care o specifici.
De la aici:
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'
);
}
Reține că, deși acest cod seamănă destul de mult cu răspunsul acceptat în prezent, răspunsul acceptat nu a funcționat pentru mine (și, judecând după comentarii, pentru mai mulți alții).

Nu există nicio diferență față de răspunsul existent și acceptat, cu excepția faptului că nu oferi nicio explicație. Te rog să citești [răspunsul].
