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 – link_before

Od verze 2.7 nabízí WordPress dva nové parametry pro funkci wp_list_pages() a to link_before a link_after. Tyto parametry umí před odkaz vložit nějaký text nebo html. Co však neumí (a nebo se mi to nepovedlo najít nebo vymyslet) je vložení entity. Takovým vhodným využitím by bylo vložení např. nezalomitelných mezer, pokud máme text v menu vycentrován, doplněn grafickými odrážkami a je nastaveno pozadí odkazu. Pak je sice text vycentrován, ale použití grafické odrážky způsobí to, že celý blok (tj. odkaz a odrážka) nepůsobí vycentrovaně. V tu chvíli jediná možnost jak zarovnat odkaz i s grafickou odrážkou na střed je právě parametr link_before a odsazení si musíme dodělat pomocí html.

Celá konstrukce bude vypadat nějak následovně:

<?php wp_list_pages('depth=1&title_li=&exclude=57&link_before=<span class="odsazeni"> </span>'); ?>

Span musí být párový, pokud ho uděláme jako <span /> tak do něj WordPress uzavře text odkazu, což je nežádoucí. A styl pro třídu .odsazeni bude následující

.odsazeni
{
display: inline-block;
width: 10px;
}

Je to opravdu provizorní řešení.

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

Horizontální CSS menu – „space bug“

Při tvorbě horizontálního CSS menu pomocí unordered listu jsem narazil na chybu, která vzniká kvůli použití display: inline, popř. inline-block nad list-itemem unordered listu. Ten má nastaveno display: inline kvůli tomu, aby se položky listu zobrazovaly v řádku. Jenže to je právě příčinou vzniku malé mezery mezi jednotlivými list-itemy. Řešením je nenastavovat list-itemu display: inline, ale místo toho mu dát float: left. Pak už funguje tak jak má.

Automatické odpojení GPRS na HTC Vox

Windows Mobile mají jednu nepříjemnou vlastnost. Pokud se připojíte na GPRS/EDGE a pak ukončíte program, který jej používal, zůstane připojení i nadále aktivní. Když nic jiného, mírně to vybíjí baterii. Řešení je opět v registrech.

V HKEY_LOCAL_MACHINECommConnMgrPlannerSettings se nachází klíč SuspendResume - stačí buď smazat tento klíč nebo jej přejmenovat na něco jiného. Pak dojde k okamžitému odpojení GPRS hned po ukončení programu, který jej využíval.

Page 1 of 212»