Problém s funkcí query_post při stránkování

Jestliže v šabloně z nějakých důvodů nevystačíme se standardním načtením článků pomocí konstrukce


if (have_posts()) : while (have_posts()) : the_post();

a potřebujeme využít funkci query_posts() například pro vyloučení některých kategorií, tagů, autora a podobně, typicky v podobě:


// výběr článků z vybraných rubrik
query_posts('cat=2,6,17,38');

// výběr článků patřících do několika rubrik současně
query_posts(array('category__and' => array(2,6)));

// výběr článků s vyloučením určité rubriky
query_posts('cat=-3');

Rychle zjistíme, že tento postup sice vede k cíli, nicméně přestane fungovat stránkování a tím i pluginy jako např. výborný „WP-PageNavi“:222.

Náprava je jednoduchá:


if (have_posts()):

// obnovíme parametr 'paged'
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1; 
query_posts("cat=-3&paged=$paged");

// a pak už pokračujeme standardním
while (have_posts()) : the_post();

Viz též Separatista nebo David Binda

Properly using wp_reset_postdata(), wp_reset_query() and variable naming in queries »

How to fix pagination for custom loops »