query_posts-Abfrage: Linkfehler in der WordPress-Navigation beheben

 8. März 2012

Das Problem hat mich schon eine ganze Weile gequält. Nutzte man in WordPress eine eigene Loopabfrage mittels query_posts (um beispielsweise Kategorien auzuschließen), zerwürfelte es die Pagination am Ende der Seite. Egal, ob nur das WordPresstypische «Ältere Beiträge / Neuere Beiträge» angezeigt wurde oder eine eigene Pagination.

Egal wohin man dort klickte, die Links gaben immer dieselben Artikel aus. Ab und an auch 404-Fehler. Der Grund ist simpel: die Funktion überschreibt alle Objektabfragen rigoros, «vergisst» imgrunde beim Neuaufruf, dass sie Beiträge bereits angezeigt hat. Durch simples Tauschen der Codezeile, lässt sich dieser Bug jedoch umgehen und die Pagination funktioniert wieder.

Statt des üblichen Loops

<?php if (have_posts()) : ?>
<?php query_posts("#PARAMETER"); ?>
<?php while (have_posts()) : the_post(); ?>

wird dieser eingesetzt

<?php if (have_posts()) : ?>
<?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; query_posts("category_name=kategoriename&paged=$paged"); ?>
<?php while (have_posts()) : the_post(); ?>

Die Funktion get_query_var prüft hierbei, ob bereits eine Abfrage-Variable vorhanden ist. Diese wird in die Ausgabe des query_posts eingefügt und je nach Wert weiß query-posts nun, auf welcher Seite es sich befindet und welche Beiträge somit schon angezeigt worden sind. Ist keine Variable verfügbar, geht die Funktion davon aus, dass man sich auf der ersten Seite des Abrufes befindet.

>>> stylizedweb.com