Při vytváření šablony pro svůj blog jsem narazil na známý bug WordPressu. Při zadávání kriterií pro výpis článků nefunguje při použití parametru offset stránkování pomocí next_posts_link, previous_posts_link, respektive posts_nav_link().
Ono už i správná funkčnost stránkování při výpisu specifické kategorie nefunguje asi přesně tak, jak by asi měla. Vše se ale vyřeší explicitním zadáním parametru paged:
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1; $args = array ( 'cat' => '-1,-2', 'posts_per_page' => get_option('posts_per_page'), 'paged' => $paged ); query_posts($args);
Potom stránkování příspěvků funguje. Problém je, když nepotřebujete vypisovat příspěvky od prvního, ale jako já až od třetího. Normálně člověka napadne použít parametr offset s hodnotou 3. Ale ouha, potom opět nefunguje stránkování.
Řešení je jednoduché, pokud jsou jasně dány ony tři příspěvky, které se mají přetočit (na mých stránkách to jsou právě ty tři horní s označením NEJNOVĚJŠÍ. V jejich smyčce je pouze nutné uložit jejich ID do pole:
$qry = array(); $count=1; // ještě před smyčkou $qry[count-1] = $post->ID; $count++; // ve smyčce
IDčka nežádoucích příspěvků tedy máme a předáme je v parametru post__not_in do kritérií další smyčky
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1; $args = array ( 'cat' =>; '-4,-6', 'post__not_in' => $qry, 'posts_per_page' => get_option('posts_per_page'), 'paged' => $paged ); query_posts($args);
Tímto trikem se elegantně obejde použití parametru offset a tak stránkování funguje korektně. Samozřejmě, toto není jediný (a možná ani nejlepší) způsob, jak dosáhnout kýženého výsledku. Komu by nevyhovoval, může se obrátit na strýčka googla.

Zdravím,
předem se omlouvám za asi lamerské dotazy, ale kdy jsi mi pomohl, tak budu rád…
mohl bych se zeptat, jak označím třeba 4 nejnovější příspěvky nějakým IDčkem?
chtěl bych mít na první stránce slider se 4 prvníma příspěvkama a za ním vypsaných dalších 6…na další stránce pak normálně 10, ale právě offset mi rozhodí celé stránkování..
komentář od Andres — 24.6.2011 @ 23.15
Zdar.
Ohledně WordPressu nepovažuju žádný dotaz za lamerský – sám každý den objevuju nové zádrhely, finty a vychytávky.
A teď k těm ID. Ty dostane příspěvek při svém vytvoření, tj. ty sám příspěvek nijak neoznačíš. Ten tvůj layout se čtyřma featured příspěvkama ve slideru bych asi řešil dvěma smyčkama. V první bych „našel“ zkrátka 4 nejnovější příspěvky a při jejich zobrazování bych si uložil jejich ID do pole (to, co vlastně radím v tomhle blogu). Při výpisu těch dalších šesti bych jednoduše do kriterií pro smyčku dal nezobrazovat příspěvky s těmato ID (‘post__not_in’ => $nazev_pole_s_ulozenymi_ID).
komentář od EuGenio — 25.6.2011 @ 23.10
Teď mě tak napadlo, že pomocí výše popsaného bych asi neuměl udělat ten efekt, aby na první stránce byly příspěvky v uspořádání 4 ve slideru + 6 dalších normálně a na dalších stránkách jenom 10 normálně. Hned mi ale taky napadlo, jak to obejít. Opět bych použil dvě smyčky – první na 4 příspěvky do slideru (asi by se ani nemuselo ukládat jejich ID) a druhou, opět od začátku (teda včetně těch 4 ze slideru), ovšem pokud by se zobrazovala první stránka (z hlavy nevím, jak to kontrolovat, jestli to vůbec jde), tak by se první 4 příspěvky nezobrazovali (buď by se pomocí IF jejich zobrazování přeskočilo, nebo by se jim přiřadila CSS class obsahujicí display: none). Jak jsem ale psal, je to odvislé od možnosti testování aktuálně zobrazované stránky.
komentář od EuGenio — 25.6.2011 @ 23.17