it-swarm-eu.dev

Změna pořadí sekcí nabídky správce?

Dostávám se trochu frustrovaný po tom, co jsem strávil několik hodin a snažil se dosáhnout tohoto poměrně jednoduchého úkolu bez štěstí.

V podstatě mám 5 vlastních typů příspěvků, které jsem vytvořil a vše, co chci udělat, je ukázat každý z nich ve specifickém pořadí přímo pod "řídicí panel" .

Z dokumentace WordPressu se zdá, že to opravdu nemůžete udělat, protože nejvyšší nabídka se zdá být "5". A nad L

Hádám, že někteří odborníci čtení to může ukázat mi jednoduchý způsob, že mohu objednat admin menu přesně tak, jak chci, s využitím souboru funkcí a bez použití plugin (což vím, existuje).

Prosím, jděte do toho a zkuste vytvořit 5 samostatných typů příspěvků a zahrnout je do určitého pořadí přímo pod přístrojovou deskou ... zdá se, že to není možné. mohl sdílet se mnou nebo nejlépe bez využití jQuery?

31
Binarybit

Hi @BinaryBit:

Není divu, že jste trochu frustrovaný; admin menu je jedním z nejtěžších a frustrujících implementací přes WordPress jádro. Upřímně, nevím, co si mysleli, když to navrhli.

@EAMann udělalvýbornýúkol vysvětlovat, jak administrátorské menu pracuje ve WordPressu (přeji si, abych to mohl přečíst asi před 4 měsíci ...) :)

Po tom, co jsem přišel na to, jak to funguje, jsem byl stále v rozpacích, abych s ním pracoval, aniž bych věnoval dostatek času, abych si udržel hlavu rovnou, zatímco jsem se snažil dělat jednoduché věci. Proto jsem postavil Menu API , které zjednodušuje a zjednodušuje práci s menu WordPress admin.

Jsou 100% kompatibilní s existujícími strukturami WordPressu a stále ještě v alfa, protože jsem jediný. Jsem si jistý, že existují případy použití, které ještě nezvládnou. Ale já sem pošlu kód pro vás a ostatní, abyste si to vyzkoušeli.

Zde můžete download soubor uložit do adresáře motivu: wp-admin-menu-classes.php a co následuje mohou volat funkce v souboru functions.php vašeho tématu:

<?php
require_once('wp-admin-menu-classes.php');
add_action('admin_menu','my_admin_menu');
function my_admin_menu() {
  swap_admin_menu_sections('Pages','Posts');              // Swap location of Posts Section with Pages Section
  rename_admin_menu_section('Media','Photos & Video');    // Rename Media Section to "Photos & Video"
  delete_admin_menu_section('Links');                     // Get rid of Links Section
  $movie_tags_item_array = get_admin_menu_item_array('Movies','Movie Tags');  // Save off the Movie Tags Menu
  update_admin_menu_section('Movies',array(               // Rename two Movie Menu Items and Delete the Movie Tags Item
    array('rename-item','item'=>'Movies','new_title'=>'List Movies'),
    array('rename-item','item'=>'Add New','new_title'=>'Add Movie'),
    array('delete-item','item'=>'Movie Tags'),
  ));
  copy_admin_menu_item('Movies',array('Actors','Add New')); // Copy the 'Add New' over from Actors
  renamed_admin_menu_item('Movies','Add New','Add Actor');  // Rename copied Actor 'Add New' to 'Add Actor
  add_admin_menu_item('Movies',array(                       // (Another way to get a 'Add Actor' Link to a section.)
    'title' => 'Alt Add Actor ',
    'slug' => 'post-new.php?post_type=actor',
  ), array(// Add Back the Movie Tags at the end.
    'where'=>'end'
  ));
  add_admin_menu_item('Movies',$movie_tags_item_array,array(// Add Back the Movie Tags at the end.
    'where'=>'end'
  ));
  delete_admin_menu_section('Actors');                      // Finally just get rid of the actors section
}

A co víc, tyto funkce jsou dokonce v úvahu (jako základ) pro zahrnutí do WordPress 3.1 takže pokud budeme mít štěstí, mohou se dokonce stát standardem!

33
MikeSchinkel

Zde je rychlý návod, jak WordPress admin menu je postaven - nemluvím add_menu_page API, mám na mysli aktuální výchozí WordPress menu.

Volání souboru menu

Menu je samozřejmě načteno pomocí wp-admin/admin.php. Ale to není načten přes standardní API jsme zvyklí na základě dokumentace WordPress. Celé menu (všechny možné volby, podnabídky atd.) Se načítá přes jednoduché pole, které je definováno v wp-admin/menu.php.

Takže načíst systém menu, admin.php jen requires menu.php ... kolem řádku 99 ve WordPress 3.0.

Načítání Menu

Vlastní menu je uloženo v globálním poli $menu. Podle in-line dokumentace má pole menu tyto prvky:

The elements in the array are:
    *     0: Menu item name
    *     1: Minimum level or capability required.
    *     2: The URL of the item's file
    *     3: Class
    *     4: ID
    *     5: Icon for top level menu

Ovládací panel je například:

$menu[2] = array( __('Dashboard'), 'read', 'index.php', '', 'menu-top menu-top-first menu-icon-dashboard', 'menu-dashboard', 'div' );

Soubor prochází a načte každou položku nabídky do pole a načte všechny jejich položky dílčí nabídky do pole s názvem $submenu, které indexuje na základě adresy URL nadřazené nabídky. Položka podnabídky ovládacího panelu nazvaná „Řídicí panel“ je:

 $submenu[ 'index.php' ][0] = array( __('Dashboard'), 'read', 'index.php' );

Po dokončení systému se načtou všechny nabídky (není jich mnoho, ale systém postupuje indexem v čase o 5 nebo 10 ... všimněte si, že Dashboard, i když je to první položka nabídky, je stále indexován jako položka "2" (pole PHP začínají na indexu 0 ... takže vám to dává prostor pro manévrování).

V tomto okamžiku systém volá wp-admin/includes/menu.php.

Procházením Menu

Tento třetí soubor prochází každou položkou nabídky a na základě oprávnění přidělených aktuálnímu uživateli buď používá nabídku, nebo ji odstraní. Nejprve se projde všemi podnabídkami a odstraní stránky, ke kterým uživatel nemá přístup. Pak se smyčky přes mateřské stránky a dělá totéž. Pak odstraní všechny duplicitní oddělovače, které nezůstanou v menu.

Nakonec nabídky třídí podle jejich přiřazeného pořadí.

Objednávání vlastních menu

Háček admin_menu se volá po nastavení menu, ale před cokoliv je objednáno. Takže je možné objednat celý systém WordPress menu bez "hackování" API.

Po aktivaci akce admin_menu jsou vaše vlastní stránky načteny do systému. Další věc, která se stane, je WordPress kontroluje filtr s názvem custom_menu_order ... tento filtr se vždy vrátí false a řekne WordPress, zda chcete použít vlastní objednávku.

Chcete-li nastavit příznak na true, přidejte následující téma a definujte explicitní pořadí nabídky:

function custom_menu_order($menu_ord) {
       if (!$menu_ord) return true;
       return array('index.php', 'edit.php', 'edit-comments.php');
}

add_filter('custom_menu_order', 'custom_menu_order');
add_filter('menu_order', 'custom_menu_order');

Zadejte pořadí, které chcete pro všechny nabídky (uvedl jsem odkazy na soubor pro načítání menu, abyste mohli získat seznam názvů souborů) a mělo by se o něj postarat.


EDIT (9/2/2010):

Chcete-li pomocí této metody určit pořadí úprav obrazovky vlastního typu příspěvku, musíte znát adresu URL obrazovky úprav. Většinou to bude http://blog.url/wp-admin/edit.php?post_type=POST_TYPE. To záleží na tom, jak je WordPress nastaven na vašem webu (je-li nainstalován v kořenovém adresáři nebo v podsložce) a na typu používaného typu vlastního příspěvku.

Například...

Řekněme, že máte vlastní příspěvek typu 'Stack Exchange Questions' a chcete, aby se editor zobrazoval ve stejné sekci jako řídicí panel přímo pod ikonou řídicího panelu. Použili byste následující kód v souboru functions.php motivu:

function custom_menu_order($menu_ord) {
       if (!$menu_ord) return true;
       return array('index.php', 'edit.php?post_type=stack_exchange_questions');
}

add_filter('custom_menu_order', 'custom_menu_order');
add_filter('menu_order', 'custom_menu_order');

Zbytek nabídky nebude ovlivněn, ale vaše vlastní stránka úprav bude přesunuta do stejné sekce jako řídicí panel a zobrazí se hned pod ní. Pomocí tohoto můžete přesunout vlastní typy příspěvků do libovolné části nabídky pro správu a umístit je do libovolného pořadí. Stejným způsobem můžete také přesouvat standardní položky menu.

Ujistěte se, že zadáváte pořadí všech položek menu v dané sekci , jinak může být vaše nabídka předmětem neočekávané podivnosti.

21
EAMann

Uvědomuji si, že se jedná o staré vlákno, ale myslím, že to stojí za aktualizaci s mnohem snadnějším řešením. Vezměte prosím na vědomí, že tato funkce funguje s verzí 3.5 a nebyla testována s žádnou jinou verzí. Následující kód lze umístit do pluginu nebo do souboru functions.php.

Viz: http://codex.wordpress.org/Plugin_API/Filter_Reference/menu_order . Mírně upravený tak, aby vyhovoval potřebám původního odesílatele (ačkoliv doufám, že do teď našel řešení ...).

  // Rearrange the admin menu
  function custom_menu_order($menu_ord) {
    if (!$menu_ord) return true;
    return array(
      'index.php', // Dashboard
      'edit.php?post_type=custom_type_one', // Custom type one
      'edit.php?post_type=custom_type_two', // Custom type two
      'edit.php?post_type=custom_type_three', // Custom type three
      'edit.php?post_type=custom_type_four', // Custom type four
      'edit.php?post_type=custom_type_five', // Custom type five
      'separator1', // First separator
      'edit.php?post_type=page', // Pages
      'edit.php', // Posts
      'upload.php', // Media
      'link-manager.php', // Links
      'edit-comments.php', // Comments
      'separator2', // Second separator
      'themes.php', // Appearance
      'plugins.php', // Plugins
      'users.php', // Users
      'tools.php', // Tools
      'options-general.php', // Settings
      'separator-last', // Last separator
    );
  }

  add_filter('custom_menu_order', 'custom_menu_order'); // Activate custom_menu_order
  add_filter('menu_order', 'custom_menu_order');

Všechny položky v nabídce admin, které zde nejsou uvedeny, nebudou odstraněny. Budou připojeny v dolní části nabídky.

18
Matt

Chcete-li přesouvat položky v nabídce, líbí se mi použití proměnné Global $menu.

Pokud bych například chtěl přesunout nabídku „Stránky“ do dolní části nabídek, použil bych to v souboru functions.php nebo v pluginu:

function admin_menu_items() {
    global $menu;
    $menu[102]=$menu[20];//make menu 102 be the same as menu 20 (pages)
    $menu[20]=array();//make original pages menu disappear

}
add_action('admin_menu', 'admin_menu_items');

a kdybych chtěl přepnout nabídky Posts and Links:

function admin_menu_items() {
    global $menu;
    $storemenu = $menu[15];//save links menu into $storemenu
    $menu[15] = $menu[5];//make links menu = posts menu
    $menu[5] = $storemenu; //make menu 5/posts = $storemenu/links   
}
add_action('admin_menu', 'admin_menu_items');

Tento trik používáte jen chvilku, testujete s WP 3.4.1

2
forlogos

Chápu, že nechcete používat plugin, ale pro čistou jednoduchost zkuste plugin Editoru Admin Menu od Janis Elsts. Uspořádejte si nabídky administrátora jakýmkoliv způsobem. můžete také skrýt položky nabídky.

2
Ray Gulick

Úžasný. Děkuji mnohokrát. Vložil jsem do svých funkcí některé řádky kódu

require_once('/extras/wp-admin-menu-classes.php');
add_action('admin_menu','my_admin_menu');
function my_admin_menu() {
  swap_admin_menu_sections('Pages','Posts'); // Swop location of Posts Section with Pages Section
}

Navíc umístění wp-admin-menu-classes.php do složky motivu a nyní tlačítko 'příspěvky' je přepnuto tlačítkem 'stránky'.

Doufám, že se to brzy stane součástí jádra, a to tak, že nepotřebujeme psát celé menu v rámci funkce, aby bylo možné znovu uspořádat dvě tlačítka.

Ve skutečnosti to bylo trochu složitější získat více specifikované pořadí pro 4 tlačítka. Pro změnu 4 tlačítek na: Stránky, Post, Média, Odkazy jsem potřeboval použít následující kód:

  swap_admin_menu_sections('Pages','Posts');                
  swap_admin_menu_sections('Media','Links');                 
  swap_admin_menu_sections('Posts','Links');
0
Sebastian