27. duben 2011
Jak ve Wordpress nevypisovat příspěvky z určité kategorie
Ať už vytváříte vlastní šablonu pro Wordpress, nebo jen potřebujete mírně upravit šablonu stávající, asi jste se setkali s požadavkem na omezení vypisovaných příspěvků. Často nechcete vypisovat příspěvky z určité kategorie, nebo naopak vypisovat přípěvky jen z kategorií, které si určíte. Někdy je navíc specifický požadavek, aby se takto chovala pouze titulní stránka. Ukážeme si jak na to.
Editovat budeme soubor index.php v adresáři šablony. Pokud budete chtít podobnou restrikci použít i na archiv, nebo nějaké další specifické stránky šablony, pak je postup podobný.
Jak zjistit ID kategorie/rubriky
První co potřebujeme je vědět číslo kategorie, kterou nechceme zobrazovat. V administraci Wordpress vybereme v menu s příspěvky položku Rubriky. A najedeme na kategorii/rubriku kde chceme zjistit ID.
Ve stavovém řádku, nebo v adresním řádku pokud klikneme uvidíme něco podobného
tag_ID nám udává hledané ID. V tomto případě 37
Jak vypsat všechny příspěvky kromě určité kategorie
Najdeme v šabloně kus kódu kde je
if (have_posts()) : while (have_posts()) : the_post();
To je část šablony kde se v cyklu prochází jednotlivé vybrané příspěvky a jeden po druhém se zobrazují. Zde máme standardně vybrané všechny příspěvky. Pokud chceme provést omezení na příspěvky, které nespadají do určité kategorie, musíme nad tento kód přidat následující řádek
query_posts("cat=-25&posts_per_page=10&paged=".$paged."");
Tímto příkazem definujeme výpis příspěvků jako všechny příspěvky ze všech kategorií, vyjma kategorie 25. Samozřejmě 25 je zde jako příklad, sem musíte vložit ID kategorie kterou nechcete vypisovat. Pro vyřazení z výpisu musí být ID kategorie s mínusem. Dalšími parametry je posts_per_page kde se nastavuje počet příspěvků na stránku, pro zajištění správného počtu příspěvků a stránkování.
Pokud chcete odebrat z výpisu příspěvky spadající do více kategorií, prostě je oddělíte čárkou, kód pak vypadá takto
query_posts("cat=-25,-33&posts_per_page=10&paged=".$paged."");
Celý kód v šabloně pak budev tomto pořadí
query_posts("cat=-25,-33&posts_per_page=10&paged=".$paged."");
if (have_posts()) : while (have_posts()) : the_post();
Nyní přidáme kontrolu, zda jde o homepage. Na stránkách s konkrétními kategoriemi už omezení nechceme. Mohlo by se stát že 25 je třeba kategorie Fotografování a po kliknutí na kategorii Fotografování bychom všechny příspěvky v kategorii Fotografování vyfiltrovali pryč.
if (is_home()) {
query_posts("cat=-25,-33&posts_per_page=10&paged=".$paged."");
}
if (have_posts()) : while (have_posts()) : the_post();
Tím máme omezení hotové.
Jak vypsat všechny příspěvky pouze určité kategorie
Může nastat opačná situace, kdy chceme vypsat pouze příspěvky spadající do konkrétní kategorie. Pak ID kategorie, zadejte bez mínusu. Tím se vypíší pouze články v definované kategorii nebo kategoriích a žádné jiné.
Kód pro vypsání příspěvků s kategorií ID = 27 bude vypadat takto
query_posts("cat=27&posts_per_page=10&paged=".$paged."");}
Kompletní kód s kontrolou homepage a přidání ještě druhé kategorie s ID=13 takto
if (is_home()) {Funkce query_post toho samozřejmě umí mnohem víc, můžete omezovat pomocí datumů, měnit řazení příspěvků, předávat parametry formou pole a další. Pro více informací doporučuji referenční příručku Wordpress k funkci query_posts
query_posts("cat=13,27&posts_per_page=10&paged=".$paged."");
}
if (have_posts()) : while (have_posts()) : the_post();
Příklad funkčního řešení, si můžete prohlédnout na www.soutez.org, kde v přehledu soutěží jsou zobrazeny všechny kategorie vyjma kategorií "Ukončené soutěže" a "SMS soutěže", nicméně na stránce konkrétní kategorii už příspěvky vypsané jsou.