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

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

 '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  'after' => '', //text za HTML tagem 'link_before'     => '', //text před samotným textem odkazu
  'link_after'      => '', //text za samotným textem odkazu
  'items_wrap'      => '
    %3$s
', //HTML markup vlastního menu
  'depth'           => 0, //do kolikáté úrovně zobrazovat podstránky. 0 znamená všechny úrovně
);
wp_nav_menu( $args ); ?>

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

 '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  'after' => '', //text za HTML tagem 'link_before'     => '', //text před samotným textem odkazu
  'link_after'      => '', //text za samotným textem odkazu
  'items_wrap'      => '
    %3$s
', //HTML markup vlastního menu
  'depth'           => 0, //do kolikáté úrovně zobrazovat podstránky. 0 znamená všechny úrovně
);
wp_nav_menu( $args ); ?>

Exclude subcategory post from being viewed on parent category archive

This default behavior, showing subcategory posts on parent category archive page may be undesirable. To exclude subcategory posts from parent category archive you have to modify the $query.

As it is known that query_posts does not modifiy the main query, but executes new one, this is not the function we would use. It is preferable to use ‚pre_get_posts‘ hook to modify main query. And so I’m using this hook in my simple WordPress snippet for preventing of showing subcategory posts on parent category archive page. Here is the WordPress snippet – insert it into your functions.php

function binda_limit_only_to_one_category( $query ) {
	//check for main query and apply only on category archive page    
    if ( $query->is_category() && $query->is_main_query() ) {    	
			//category__in does not bring posts from subcategories        
        $query->set( 'category__in', array( $query->get('cat') ) );
			//unset cat which brings posts from subcategories
        $query->set( 'cat', '' );
    }
    //return query
    return $query;
}
add_action( 'pre_get_posts', 'binda_limit_only_to_one_category' );

Exclude subcategory post from being viewed on parent category archive

This default behavior, showing subcategory posts on parent category archive page may be undesirable. To exclude subcategory posts from parent category archive you have to modify the $query.

As it is known that query_posts does not modifiy the main query, but executes new one, this is not the function we would use. It is preferable to use ‚pre_get_posts‘ hook to modify main query. And so I’m using this hook in my simple WordPress snippet for preventing of showing subcategory posts on parent category archive page. Here is the WordPress snippet – insert it into your functions.php

function binda_limit_only_to_one_category( $query ) {
	//check for main query and apply only on category archive page    
    if ( $query->is_category() && $query->is_main_query() ) {    	
			//category__in does not bring posts from subcategories        
        $query->set( 'category__in', array( $query->get('cat') ) );
			//unset cat which brings posts from subcategories
        $query->set( 'cat', '' );
    }
    //return query
    return $query;
}
add_action( 'pre_get_posts', 'binda_limit_only_to_one_category' );

Chybějící odkazy ve WordPress 3.5

Pokud si nainstalujete nový WordPress 3.5*, tak budete marně hledat v administrátorské postranní liště položku Odkazy (anglicky Links). WordPress tuto změnu dopředu avizoval a já jsem na to také účastníky školení WordPressu upozorňoval. Chybí-li Vám tato funkcionalita – doporučuji plugin Link Manager. * Používáte-li odkazy na svém webu a WordPress na novou verzi pouze upgradujete, […]

Tisk příspěvků

Moderní prohlížeče si dokážou s webovými stránkami docela dobře poradit, takže jejich tisk už není utrpení. I přesto nejsou jejich algoritmy dokonalé a jelikož myslíme na uživatele, tak nechceme, aby plýtval svým drahým tonerem na zbytečnosti. Proto si ukážeme, jak ve WordPressu vytvořit jednoduchou stránku pro tisk dokumentů. V praxi vypíšeme pouze text příspěvku a […]

Nejaktivnější komentující

Dnešní tip je widget pro nejaktivnější komentátory. Jeden podobný už zde byl k vidění, ale ten dnešní má nový grafický kabát. Nevypisuje se totiž textově, ale graficky v podobě gravatarů. Na škodu je, že pořád velká část lidí dosud neví, jak si takový gravatar zařídit a tudíž se může stát, že namísto mixu osobností to […]

WordPress 3.5 „Elvin“

Po půl roce se dnes objevil nový WordPress 3.5, který po dlouhé době přináší poměrně velké změny pro uživatele, a to zejména v oblasti správy mediálních souborů. Stručný přehled novinek a aktuální stav české verze naleznete v následujícím článku. WordPress 3.5 “Elvin“ je pojmenovaný tentokrát podle amerického jazzového bubeníka Elvina Jonese, jehož melodie můžete slyšet i […]

Zjištění ID rodičovské kategorie

Potřebujete-li v loopu např. ve výpisu příspěvků z rubriky (archivu) zjistit u každého příspěvku ID kořenové rubriky (tedy jsou-li rubriky vnořené), vložte do *functions.php* funkci


/*
* Returns ID of top-level parent category, or current category if you are viewing a top-level
*
* @param    string      $catid      Category ID to be checked
* @return   string      $catParent  ID of top-level parent category
*/
function pa_category_top_parent_id ($catid) {
 while ($catid) {
  $cat = get_category($catid); // get the object for the catid
  $catid = $cat->category_parent; // assign parent ID (if exists) to $catid
  // the while loop will continue whilst there is a $catid
  // when there is no longer a parent $catid will be NULL so we can assign our $catParent
  $catParent = $cat->cat_ID;
 }
return $catParent;
}

a v loopu si ji pak jen zavoláme pro hodnotu ID:


$catid = get_query_var('cat');
$topcat = pa_category_top_parent_id ($catid);
// a můžeme použít třeba v podmínce
if ($topcat == konkretni-hodnota-id): neco-udelej;

Zdroj »