Carrington Mobile und das Problem mit der Pagination

Seit Ewigkeiten verwende ich das Plugin WordPress Mobile Edition, mit dem es möglich ist, Nutzern von Mobiltelefonen eine mobile Darstellung des eigenen Blogs zu präsentieren. Dieses hatte ich damals ein wenig angepasst und dabei den internen Ablauf des Plugins optimiert.

Darüber hinaus verwende ich seit neustem das kostenlose Sistrix Smart, um ein bisschen zu gucken, ob meine Webseite Fehler oder ähnliches enthält. Aus irgendeinem Grund kam es zu 404-Fehlern, wenn der Crawler von Sistrix den Mobilversion-Links folgte. Das machte sich in den Auswertungen dann wie folgt bemerkbar:

Mobillink führt zu Fehler

Mobillink führt zu Fehler

Das Plugin WordPress Mobile Edition funktioniert wie folgt: Es wird geprüft, mit welchem User-Agent der Nutzer die Seite aufruft. Wenn dieser zur Liste der mobilen Clients gehört, wird WordPress angewiesen, ein alternatives Theme zu verwenden. Genauer gesagt wird das Carrington Mobile Theme verwendet.

Ich dachte ja zuerst, ich hätte im Blog etwas falsches eingestellt, doch die Desktopversion des Blogs funktionierte immer einwandfrei. Aus diesem Grund habe ich einmal einen Blick in das Mobiltheme geworfen. Leider ist dieses relativ umständlich strukturiert, sodass man sich sämtliche Teile bruchstückhaft zusammensuchen muss.

Hier ein Tipp: Das Plugin WordPress Mobile Edition wird mit einer veralteten Version 1.0.2 des Themes ausgeliefert. Falls ihr auch Probleme mit der Pagination habt und diese beheben wollt, updatet das Theme vorher auf die aktuelle Version 1.2. 🙂

Okay. Weiter im Text. Das Problem war relativ schnell gefunden: Das Theme Carrington Mobile verwendet nur auf der Indexseite die blogweite Vorgabe, wieviele Artikel pro Seite angezeigt werden sollen. In Archivübersichten und auf Suchergebnisseiten werden einfach 25 Einträge angezeigt. Das bedeutet, wenn man z.B. auf der Desktopversion nur 10 Artikel pro Seite anzeigen lässt, gibt es dort mehr Artikelseiten als in der Mobilversion. Alle Artikelseiten, die in der Mobilversion nicht existieren, führen zu einem 404-Fehler, wenn man versucht, sie aufzurufen. Leider habe ich keinen Ort gefunden, wo man einfach konfigurieren könnte, wieviele Artikel pro Seite angezeigt werden, also musste ich mir WordPress-Mittel zur Hilfe nehmen. Hier nun Schritt für Schritt die einzelnen Änderungen.

Als allererstes musste ich die Datei "./carrington-core/carrington.php" aufsuchen. Sie ist sozusagen das Herz des Themes und stellt viele wichtige Funktionen bereit. Hier habe ich Code eingefügt, der WordPress dazu bringt, in der "Loop" nur eine definierte Anzahl (= CFCT_POST_LIMIT) an Artikeln zurückzuliefern. Welche Artikel das sind, ist abhängig von der Artikelseite, auf der man sich gerade befindet. Diesen Codeblock fügt ihr am besten über die Funktion "cfct_init()" ein.

1
2
3
4
5
6
7
8
9
10
11
12
13
/* set post limits to 5 */
define("CFCT_POST_LIMIT", 5);

function cfct_set_post_limits( $limits )
{
  $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;

  return 'LIMIT ' . ($paged-1)*CFCT_POST_LIMIT . ', ' . CFCT_POST_LIMIT;
}
add_filter('post_limits', 'cfct_set_post_limits' );
/* set post limits to 5 */

function cfct_init() { [...]

Eigentlich könnte man ja davon ausgehen, dass das Problem damit gelöst ist. Doch leider ist das nicht der Fall, denn die Pagination (sprich: das Generieren des vor- und zurück-Buttons) basiert immernoch auf der alten Anzahl von 25 Artikeln. Um das zu ändern muss eine weitere Änderung in der Datei "./loop/loop-default.php" vorgenommen werden. Diese enthält die eigentliche Loop, mit der die Artikelliste ausgegeben wird. Hier fügen wir vor die eigentliche Schleife ein Stück Code ein:

1
2
3
4
5
6
/* set post limits to 5 */
global $wp_query;
query_posts(array_merge(array('posts_per_page'=>CFCT_POST_LIMIT),$wp_query->query));
/* set post limits to 5 */

if (have_posts()) { [...]

Mit diesem sorgen wir nun dafür, dass auch die Pagination mitbekommt, wieviele Artikel tatsächlich pro Seite angezeigt werden. Eigentlich würde ich erwarten, dass dies bereits durch den ersten Codeblock mit erledigt worden ist. Spannenderweise sind beide Teile notwendig. Das eine kümmert sich darum, welche Artikel aufgelistet werden, das andere kümmert sich darum, dass die vor- und zurück-Links ordentlich funktionieren.

Darüber hinaus habe ich noch eine kleine Änderung in der Datei "./footer/footer-default.php" vorgenommen. Wenn man sich innerhalb eines Artikels befindet, folgt darunter eine Auflistung der "Recent Posts". Auch diese wollte ich gern begrenzen, um ein einheitlicheres Bild zu erhalten. Hierzu müsst ihr den Aufruf der Funktion "wp_get_archives()" finden und dort das "limit" auf den definierten Wert (= CFCT_POST_LIMIT) ändern. Dieser letzte Schritt ist jedoch nur optional, da er nichts mit dem eigentlichen Fehler zu tun hat.

1
2
3
[...] <ul class="disclosure table group">
  <?php wp_get_archives('type=postbypost&limit=' . CFCT_POST_LIMIT); ?>
</ul> [...]

Falls ihr fertig mit den Änderungen seid, sollte sich das Fehlerpotential auf eurer Webseite drastisch reduziert haben. Das freut nicht nur Sistrix und eure Besucher, sondern auf lange Sicht wahrscheinlich sogar Google. Nur eine fehlerfreie Webseite ist eine gute Webseite. 🙂
Fehlerbereinigte Grüße, Kenny

Schreibe einen Kommentar

Um Ihnen beim weiteren Kommentieren auf dieser Webseite die erneute Eingabe Ihrer Daten zu ersparen, wird beim Absenden Ihres Kommentars ein Cookie an Ihren Browser gesendet und von diesem gespeichert. Mit dem Absenden eines Kommentars auf dieser Webseite stimmen Sie der Speicherung und Übertragung dieses Cookies explizit zu.

Pflichtfelder sind mit * markiert.