WordPress – link_before – lepší řešení

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.

WordPress – obsah na stránce a jejích potomcích

Problém

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.

Řešení

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 } ?>