Smarte Archiv Seite

Als ich im Januar 2008 von dem Blog-System Sunlog auf WordPress umstieg, gefiel mir die Archive-Seite, die WordPress mitlieferte, überhaupt nicht. Mit dem Plugin Smart Archive von Justin Blaton kam ich aber ungefähr zu dem zurück, was ich vorher hatte.

Was mir aber nie wirklich passte war, dass bei jedem Aufruf der Archiv-Seite weit über 600 Datenbankabfragen gemacht wurden. 50 Datenbankabfragen (auch Queries genannt) durch die sehr ineffektive Programmierung des Plugin. Alle weiteren kommen durch einen zwingenden Aufruf der WordPress-Funktion get_permalink().

Mir fiel keine andere Lösung ein, als das alles zu cachen. Darum habe ich auch mir auch etwas zusammenprogammiert, was jeder gerne auch nutzen kann, dem es gefällt. Mir ist erst im nachhinein aufgefallen, dass die neue Version von Smart Archive auch Caching behinhaltet. Ich finde meine Version aber smarter 😉 . Smart Archive cached in einer eigenen Textdatei. Bei mir wird nach jedem erstellen eines neuen Artikels das Archiv neu erstellt und als Post direkt in WordPress gespeichert.

Als erstes muss folgender Code in die Datei function.php in eurem Template kopiert werden.

  <td>
    <div class="php codecolorer">
      <span class="co1">// Archive Seite</span><br /> <span class="kw2">function</span> my_archive<span class="br0">&#40;</span><span class="br0">&#41;</span><br /> <span class="br0">&#123;</span><br />    <span class="co1">// set locale</span><br />    [<span class="kw3">setlocale</span>](http://www.php.net/setlocale)<span class="br0">&#40;</span>LC_ALL<span class="sy0">,</span><span class="st_h">'de_DE.UTF-8'</span><span class="br0">&#41;</span><span class="sy0">;</span><br />    <br />    <span class="kw2">global</span> <span class="re0">$wpdb</span><span class="sy0">;</span><br />     <span class="re0">$now</span> <span class="sy0">=</span> [<span class="kw3">gmdate</span>](http://www.php.net/gmdate)<span class="br0">&#40;</span><span class="st0">"Y-m-d H:i:s"</span><span class="sy0">,</span><span class="br0">&#40;</span>[<span class="kw3">time</span>](http://www.php.net/time)<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">+</span><span class="br0">&#40;</span><span class="br0">&#40;</span>get_settings<span class="br0">&#40;</span><span class="st_h">'gmt_offset'</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">*</span><span class="nu0">3600</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>  <span class="co1">// get the current GMT date</span><br /> <br />    <span class="re0">$allPosts</span> <span class="sy0">=</span> <span class="re0">$wpdb</span><span class="sy0">-></span><span class="me1">get_results</span><span class="br0">&#40;</span><span class="st0">"<br />        SELECT ID AS id, post_title AS title, post_name AS name, UNIX_TIMESTAMP(post_date) AS date<br />        FROM <span class="es4">$wpdb->posts</span> <br />        WHERE post_type = 'post' <br />        AND post_status = 'publish'  <br />        ORDER BY post_date DESC"</span><span class="br0">&#41;</span><span class="sy0">;</span><br />    <br />    <span class="re0">$lastdate</span> <span class="sy0">=</span> <span class="st_h">''</span><span class="sy0">;</span><br />    <br />    <span class="kw1">foreach</span> <span class="br0">&#40;</span><span class="re0">$allPosts</span> <span class="kw1">as</span> <span class="re0">$post</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />    <br />       <span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$lastdate</span> <span class="sy0">!=</span> [<span class="kw3">date</span>](http://www.php.net/date)<span class="br0">&#40;</span><span class="st_h">'Ym'</span><span class="sy0">,</span> <span class="re0">$post</span><span class="sy0">-></span>[<span class="kw3">date</span>](http://www.php.net/date)<span class="br0">&#41;</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span><br />          <span class="kw1">if</span><span class="br0">&#40;</span><span class="sy0">!</span>[<span class="kw3">empty</span>](http://www.php.net/empty)<span class="br0">&#40;</span><span class="re0">$lastdate</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="re0">$archive</span> <span class="sy0">.=</span> <span class="st_h">''</span><span class="sy0">;</span><br />          <span class="re0">$archive</span> <span class="sy0">.=</span> <span class="st_h">'<h2>[.</span> get_month_link<span class="br0">&#40;</span><a href="http://www.php.net/date"><span class="kw3">date</span>]('</span> <span class=)<span class="br0">&#40;</span><span class="st_h">'Y'</span><span class="sy0">,</span> <span class="re0">$post</span><span class="sy0">-></span>[<span class="kw3">date</span>](http://www.php.net/date)<span class="br0">&#41;</span><span class="sy0">,</span> [<span class="kw3">date</span>](http://www.php.net/date)<span class="br0">&#40;</span><span class="st_h">'m'</span><span class="sy0">,</span> <span class="re0">$post</span><span class="sy0">-></span>[<span class="kw3">date</span>](http://www.php.net/date)<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="sy0">.</span> <span class="st_h">'">'</span> <span class="sy0">.</span> [<span class="kw3">strftime</span>](http://www.php.net/strftime)<span class="br0">&#40;</span><span class="st_h">'%B %Y'</span><span class="sy0">,</span> <span class="re0">$post</span><span class="sy0">-></span>[<span class="kw3">date</span>](http://www.php.net/date)<span class="br0">&#41;</span> <span class="sy0">.</span> <span class="st_h">'</a></h2>'</span><span class="sy0">;</span><br />          <span class="re0">$archive</span> <span class="sy0">.=</span> <span class="st_h">'<ul style="list-style: none;">'</span><span class="sy0">;</span><br />          <br />          <span class="re0">$lastdate</span> <span class="sy0">=</span> [<span class="kw3">date</span>](http://www.php.net/date)<span class="br0">&#40;</span><span class="st_h">'Ym'</span><span class="sy0">,</span> <span class="re0">$post</span><span class="sy0">-></span>[<span class="kw3">date</span>](http://www.php.net/date)<span class="br0">&#41;</span><span class="sy0">;</span><br />       <span class="br0">&#125;</span><br />       <br />       <span class="re0">$archive</span> <span class="sy0">.=</span> <span class="st_h">'<li>[.</span> get_permalink<span class="br0">&#40;</span><span class="re0">$post</span><span class="sy0">-></span><span class="me1">id</span><span class="br0">&#41;</span> <span class="sy0">.</span> <span class="st_h">'">'</span> <span class="sy0">.</span> <span class="re0">$post</span><span class="sy0">-></span><span class="me1">title</span> <span class="sy0">.</span> <span class="st_h">']('</span> <span class=)</li>'</span><span class="sy0">;</span><br />       <br />    <span class="br0">&#125;</span><br />    <span class="re0">$archive</span> <span class="sy0">.=</span> <span class="st_h">'</ul>'</span><span class="sy0">;</span><br />    <br />    <span class="re0">$my_post</span> <span class="sy0">=</span> [<span class="kw3">array</span>](http://www.php.net/array)<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />    <span class="re0">$my_post</span><span class="br0">&#91;</span><span class="st_h">'ID'</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="nu0">171</span><span class="sy0">;</span> <br />    <span class="re0">$my_post</span><span class="br0">&#91;</span><span class="st_h">'post_content'</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="re0">$archive</span><span class="sy0">;</span><br /> <br />    <span class="co1">// Update the post into the database</span><br />    wp_update_post<span class="br0">&#40;</span> <span class="re0">$my_post</span> <span class="br0">&#41;</span><span class="sy0">;</span><br /> <br /> <span class="br0">&#125;</span><br /> add_action<span class="br0">&#40;</span><span class="st_h">'publish_post'</span><span class="sy0">,</span> <span class="st_h">'my_archive'</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// generate archives after a new post</span>
    </div>
  </td>
</tr>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42

In Zeile 41 muss die Zeile muss die ID (hier 171) durch die ID des Archiv-Posts ersetzt werden. Am einfachsten ist dies herauszufinden, wenn man im Admin-Menu die Archiv Seite editiert. In der Adress-Zeile findest man die ID hinter post= .

Nun muss das Archiv Template in der Datei archives.php angepasst werden. Hierfür wird alles um wp_get_archives() und wp_list_categories() durch folgendes ersetzt:

  <td>
    <div class="php codecolorer">
         <span class="kw2"><?php</span> <span class="kw1">if</span> <span class="br0">&#40;</span>have_posts<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="sy0">:</span> <span class="kw1">while</span> <span class="br0">&#40;</span>have_posts<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="sy0">:</span> the_post<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="sy1">?></span><br />       <span class="kw2"><?php</span> the_content<span class="br0">&#40;</span><span class="st_h">'<p class="serif">Weiterlesen &raquo;'</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="sy1">?></span><br />    <span class="kw2"><?php</span> <span class="kw1">endwhile</span><span class="sy0">;</span> <span class="kw1">endif</span><span class="sy0">;</span> <span class="sy1">?></span>
    </div>
  </td>
</tr>
1
2
3

Damit das Archiv angelegt wird, muss einmal ein Beitrag geschrieben werden.

Teilen :

Relevante Posts

WordPress Update richtig leicht und schnell gemacht

Diese Anleitung leistete mir sehr gute Hilfe beim Update von WordPress 2.3.3 auf die aktuelle Version 2.5.1. Trotzdem finde ich das Update Prozedere immer sehr umständlich. Eigentlich ändern sich bei den Minor-Updates – also wenn sich die letzte Ziffer ändert 😉 – nur wenige Dateien. Trotzdem kopiert man immer alle Dateien einer WordPress-Installation auf den Webspace. Dies kostet natürlich neben Bandbreite und Zeit auch gehörig Nerven.

Weiterlesen

WP-Client im App-Store

WP-Client im App-Store

Seit heute gibt es im iPhone App-Store und das kostenlos. Bei mir stürzte dieser permanent ab. Ein Neustart des iPhones brachte zunächst auch nichts. Der Fehler tritt dann auf, wenn man deutsche Umlaute im Text eingibt. Umlaute müssen daher im HTML-Code eingegeben werden.

Weiterlesen

Lightview Plus V2.0

Nach einer Ewigkeit habe ich an meinem WordPress Plugin weitergearbeitet und es endlich auf die Version V2.0 gehieft. Jetzt werden nicht nur Bilder in schöner Lightview-Manier angezeigt, sondern auch Videos von YouTube und Vimeo.

Weiterlesen