Po prvním článku tady máme elegantnější způsob jak do parametru link_before funkce wp_list_pages() dostat speciální html entitu pro odsazení. V první článku jsem toto řešil pomocí blokového spanu s nastavenou šířkou, zde je lepší způsob.
<?php $param = 'depth=1&title_li=&link_before=' . html_entity_decode(htmlentities(' ')) . '&exclude=57'; wp_list_pages($param); ?>
Pěkné je to v tom, že nám to opravdu vypíše nonbreaking spaces, zádrhel je zase ale v tom, že jako parametr htmlentities musíte opravdu napsat nezlomitelnou mezeru pomocí nějakého šikovnějšího textového editoru. A navíc je toto řešení validní narozdíl od toho prvního.
Chceme zobrazit nějaký konkrétní obsah na stránce a všech jejích potomcích. Například obrázek, který bude shodný pro všechny stránky, které tématicky zapadají do jedné kategorie webu. To znamená na rodičovské stránce a zároveň všech jejích podstránkách.
Nejdříve je třeba vyrobit funkci, která zjistí kořenového rodiče podstránky. Tu vložíme do souboru functions.php. Vypadat bude následovně:
function get_root_parent($page_id)
{
global $wpdb;
$parent = $wpdb->get_var("SELECT post_parent FROM $wpdb->posts WHERE post_type='page' AND ID = '$page_id'");
if ($parent == 0)
return $page_id;
else
return get_root_parent($parent);
}
Rekurzivně projde všechny rodiče až po toho posledního, kořenového.
A nakonec v místě, ve kterém chceme v šabloně zobrazovat obsah zavoláme s příslušným IDčkem nějakou podobnou konstrukci
<?php if ($post->ID == 4 || get_root_parent($post->ID) == 4) { ?>
// obsah
<?php } ?>