Rozšíření šablony o editovatelná menu

WordPress nabízí možnost využití  menu upravitelných z administrace. To je velký krok kupředu směrem k CMS. Pokud se učíte, jak tvořit šablony pro WP nebo jen máte starou šablonu a potřebovali byste ji modernizovat o tuto funkcionalitu, pomůže vám tento rychlý exkurz.

Předně je nutné v souboru functions.php nové mezu zaregistrovat. Stačí vložit následující kód:

if ( function_exists( 'register_nav_me­nus' ) ) { register_nav_me­nus( array( 'primary_menu' => 'Hlavní menu', 'foot_menu' => 'Menu v patičce' ) ); }

Jistě jste si všimli, že jsme tímto příkazem zaregistovali hned dvě navigační menu. Hlavní menu a menu v patičce. Pokud byste chtěli jen jedno, odstraňte řádek “‘foot_menu’ => ‘Menu v patičce’”, nebo naopak ukončete tento řádek čárkou a přidejte ješte jeden. Dbejte na to, že první parametr (tedy ‘foot_menu’ a ‘primary_menu’) musí být unikátní. Druhý slouží pro vaši orientaci, takže ideálně by měl být také unikátní, ale WordPress na tom netrvá.

Tímto jste si zaregistrovali menu a nyní již naleznete v administraci navigačních menu (Vzhled->Menu) nalevo v boxu své dvě pozice (“Hlavní menu”, “Menu v patičce”) a lze vytvářet menu a přiřazovat je těmto dvoum pozicím.

Nyní tedy již zbývá pouze nechat zobrazit menu v šabloně. Je nutné zvolit místo, kde chcete menu zobrazit – to je na vás. Pokud modernizujete starou šablonu, budete nejspíš nahrazovat funkci “wp_list_cate­gories” umístěnou v souboru header.php nebo sidebar.php.

Pro vložení menu do šablony použijte níže uvedený kód. Všechny uvedené parametry jsou parametry defaultní a proto, když je nebudete měnit, můžete je, pro zkrácení kódu, odstranit. Funkce wp_nav_menu má ještě další parametry (menu,walker,fal­back_cp), ale ty jsou pro začátečníka zbytečně komplikované a zřítka využitelné. Koho by zajímaly, nechť se obrází na kodex

<?php $args = array( 'theme_location'  => 'primary_menu', unikátní identifikátor menu nastavený v functions.php 'container'       => 'div', nebo 'nav' nebo false. Určuje, co se má použít jako element obklopující element UL samotného menu. False znamená, že žádný takový element nebude 'container_class' => 'menu-{menu slug}-container', třída (class) elementu UL obklopující samotné menu 'container_id'    => '', parametr ID elementu obklopujícího element UL samotného menu 'menu_class'      => 'menu',  třída (class) elementu UL obklopujcí menu 'menu_id'         => 'nav', parametr ID elementu UL obklopující menu 'echo'            => true, má se menu vypsat, nebo jen vrátit pomocí fce return? 'before'          => '', text před HTML tagem <a> 'after'           => '', text za HTML tagem </a> 'link_before'     => '', text před samotným textem odkazu 'link_after'      => '', text za samotným textem odkazu 'items_wrap'      => '<ul id="%1$s" class="%2$s">%3$­s</ul>', HTML markup vlastního menu 'depth'           => 0, //do kolikáté úrovně zobrazovat podstránky. 0 znamená všechny úrovně ); wp_nav_menu( $args ); ?>