Plasarea unui meniu Custom Post Type deasupra meniului Posts folosind menu_position

7 feb. 2011, 20:38:05
Vizualizări: 37.9K
Voturi: 27

Tocmai am descoperit parametrul menu_position și se pare că poți plasa meniul pentru tipul tău personalizat de postare aproape oriunde. Cu excepția poziționării deasupra meniului Posts!

Cum pot realiza acest lucru?

1
Comentarii

Bună întrebare, se pare că acesta este singurul loc unde nu merge.

jnthnclrk jnthnclrk
29 aug. 2013 15:44:36
Toate răspunsurile la întrebare 10
1
31

Poziții pentru elementele principale din meniu

  • 2 Panou de control
  • 4 Separator
  • 5 Articole
  • 10 Media
  • 15 Legături
  • 20 Pagini
  • 25 Comentarii
  • 59 Separator
  • 60 Aspect
  • 65 Plugin-uri
  • 70 Utilizatori
  • 75 Unelte
  • 80 Setări
  • 99 Separator

Descrierea parametrului pentru "poziția în meniu"

$position (integer) (opțional) Poziția în ordinea meniului unde acest element ar trebui să apară. Implicit, dacă acest parametru este omis, elementul va apărea la baza structurii meniului. Cu cât numărul este mai mare, cu atât poziția sa în meniu va fi mai jos.

ATENȚIE: dacă două elemente de meniu folosesc același atribut de poziție, unul dintre ele poate fi suprascris astfel încât doar un element va fi afișat! Riscul de conflict poate fi redus folosind valori zecimale în loc de numere întregi, de exemplu 63.3 în loc de 63.

Implicit: baza structurii meniului

21 sept. 2012 04:53:09
Comentarii

Cum să folosesc zecimale în 'menu_position' =>3? Vreau să folosesc poziția=3 pentru mai multe tipuri de postări personalizate.

Bikram Bikram
4 feb. 2020 11:19:05
0

Noul plugin JetPack își plasează linkul din meniu imediat sub linkul Dashboard. Acest lucru se întâmplă prin setarea ordinii meniului la 0, prin filtrarea array-ului $menu_order:

function jetpack_menu_order( $menu_order ) {
        // Inițializăm un nou array pentru ordinea meniului JetPack
        $jp_menu_order = array();

        // Parcurgem fiecare element din ordinea inițială a meniului
        foreach ( $menu_order as $index => $item ) {
            // Adăugăm toate elementele în afară de 'jetpack'
            if ( $item != 'jetpack' )
                $jp_menu_order[] = $item;

            // După primul element (index 0), adăugăm 'jetpack'
            if ( $index == 0 )
                $jp_menu_order[] = 'jetpack';
        }

        // Returnăm noua ordine a meniului
        return $jp_menu_order;
    }

Din curiozitate, ce s-ar întâmpla dacă ai încerca să setezi menu_position la 0?

28 mar. 2011 22:42:15
1

Căutam o soluție pe internet dar nu am găsit. Pur și simplu funcționează acest truc (de exemplu). Aici aveți lista nativă de poziții:

  • 2 Dashboard
  • 4 Separator
  • 5 Posts
  • 10 Media
  • 15 Links
  • 20 Pages
  • 25 Comments
  • 59 Separator
  • 60 Appearance
  • 65 Plugins
  • 70 Users
  • 75 Tools
  • 80 Settings
  • 99 Separator

Dacă aveți mai multe elemente, puteți citi poziția curentă pentru fiecare element afișând globalul $menu:

global $menu; 
print_r($menu); 

Deci, dacă am înțeles bine, nimic nu ne poate împiedica să reordonăm meniul așa cum dorim:

function re_order_menu () {
    // ------- Elimină elementele 
    $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]

    // -------- Resetează meniul  
    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]);

    // -------- Reordonează meniul după preferințe
    $dashboard = $menu[2];
    $separator1 = $menu[4]
    $posts = $menu[5];
    $books = $menu[6];
    /* multiple elemente personalizate */
    $authors  = $menu[7];
    $requests = $menu[8];
    $clients = $menu[9];
    $sellers  = $menu[10];
    $services = $menu[11];
    $schedules = $menu[12];
    /* lasă spațiu după */ 
    $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');

Funcționează bine pentru mine, deci cred că este legitim, greșesc?

18 mai 2017 01:09:43
Comentarii

Soluție foarte fragilă care se bazează pe numere magice. S-ar strica imediat ce un alt plugin este adăugat/eliminat și plasează un element între celelalte.

Walf Walf
13 nov. 2019 01:19:02
0

Am folosit 'menu_postion' => 0, 1, 2, 3, 4.

Nu contează cu adevărat. Dacă experimentezi cu ea, vei înțelege ușor cum funcționează.

Folosirea 'menu_position' => 1 ar trebui să o plaseze sub elementul de meniu Dashboard deasupra separatorului. Valoarea 0 ar trebui să o plaseze deasupra Dashboard-ului.

23 feb. 2011 03:12:04
0

Acesta este un bug în WordPress. Vă rugăm să consultați acest thread în Trac: http://core.trac.wordpress.org/ticket/14755

Rezolvat în versiunea 4.4...

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

6 sept. 2012 21:41:55
1

Poți folosi asta:

function my_move_post () {
    global $menu;
    $menu[6] = $menu[5]; //mută postarea din poziția 5 în 6
    unset($menu[5]); //eliberează poziția 5 ca să o poți folosi!
}
add_action('admin_menu', 'my_move_post');

Acum poți folosi poziția 5 pentru a adăuga meniul tău deasupra meniului Postări.

19 dec. 2013 16:33:09
Comentarii

Nu a funcționat pentru mine. L-am plasat în plugin-ul meu sitewide unde se află fișierul custom-post-type.php

Daniel Daniel
14 aug. 2014 19:19:04
0

iată problema întregii probleme...

WordPress 4.9.2

wp-admin/menu.php:

// Dacă trebuie să folosim $_wp_last_object_menu, incrementăm mai întâi.
$ptype_menu_position = is_int( $ptype_obj->menu_position ) ? $ptype_obj->menu_position : ++$_wp_last_object_menu; 

ATENȚIE: trebuie să fie un întreg și NU setat deja, altfel va merge la finalul listei.

20 ian. 2018 17:41:02
0

Pentru o soluție funcțională în WordPress 5 și versiuni anterioare, repoziționați-o cu următorul cod:

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

Aceasta presupune că nu aveți mai mult de un element de meniu care să se lupte pentru poziția principală.

21 aug. 2018 16:28:31
5

Pe același link pe care l-ai menționat, scrie:

menu_position
(integer) (opțional) Poziția în ordinea meniului unde ar trebui să apară tipul de postare.
Implicit: null - implicit va fi sub Comentarii
5 - sub Postări
10 - sub Media
20 - sub Pagini
60 - sub primul separator
100 - sub al doilea separator

Deci, dacă setezi menu_position la o valoare precum 4, atunci ar trebui să-l plaseze deasupra postărilor.

O poziție de -1 îl plasează deasupra link-ului Panou de control.

7 feb. 2011 20:53:54
Comentarii

Am încercat 4 dar este exact la fel ca 5.

wyc wyc
7 feb. 2011 21:23:41

Hmm. Ai încercat 1-3? Cred că poate "1" (sau "0") este Panoul de control. Poate ceva între 2-3 ar funcționa

Zack Zack
7 feb. 2011 22:32:04

0 1 2 3 Se afișează înaintea Panoului de control și 4 apare sub Postări. Este cu adevărat imposibil!

wyc wyc
8 feb. 2011 07:44:43

Wow. stricat tare WordPress? Nu știu atunci. :-/

Zack Zack
8 feb. 2011 07:52:25

Cred că 4 este separatorul chiar deasupra Postărilor, iar 5 este Postări, deci dacă setezi poziția meniului la 3 va fi chiar înaintea separatorului. Cu configurația implicită, desigur. Setând pagina mea de plugin la 4 a suprascris separatorul, dar a apărut chiar deasupra Postărilor. hmmm...

goldenapples goldenapples
28 mar. 2011 22:50:43
0

Puteți utiliza valori zecimale (ca șiruri de caractere). De exemplu, am câteva tipuri de postări personalizate pe care le-am plasat la ultima poziție din meniu (100001, 100002, 100003).

Apoi, introduceți acest cod pentru a le muta deasupra elementelor de meniu Postări și sub Panou de control.

function reorder_admin_menu() {

  global $menu;

  // Adăugați un separator

  $menu["3.1"] = array(
    0 =>  '',
    1 =>  'read',
    2 =>  'separator_' . "anything_unique",
    3 =>  '',
    4 =>  'wp-menu-separator'
    );

  // Am plasat elementele mele de meniu la final (exact aceste valori), așa că le mut în sus

  $menu["3.2"] = $menu[100001];
  $menu["3.3"] = $menu[100002];
  $menu["3.4"] = $menu[100003];

  unset($menu[100001]);
  unset($menu[100002]);
  unset($menu[100003]);

  // mută elementul de meniu Media (poziția 10) în față, în același grup
  $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 );
25 nov. 2015 21:09:52