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_menus' ) ) {
	register_nav_menus(
		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_categories” 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,falback_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 ); ?>