Endlich geschafft: Zufalls-Post auf Startseite


Der Artikel besteht aus 333 Wörtern. Geschätzte Lesezeit: 01:19 Minuten

Ich habe ja schon länger daran gebastelt und geknobelt, auf der Startseite einen Artikel anzeigen zu lassen, der eine bestimmte Bedingung erfüllt. Und zwar schwebte mir ja vor, das nur Artikel ausgewählt werden, die mindestens 60 Tage alt sind.

Leider bin ich ja nicht derjenige welcher, der von Programmieren viel Ahnung hat. Zwar habe ich schon zu Zeiten meines C16 plus4 versucht, Programme geschrieben zu bekommen - damals ja noch alles in MS-DOS und BASIC -, aber wirklich brauchbares ist auch dabei nicht rumgekommen.

Und wie es mir mit BASIC und C++ ergangen ist, so geht es mir durchaus auch mit php und Co.:

Ich versteh zwar durchaus die Syntax, weiß was if then else oder while ist und macht. Aber das in solch eine Reihenfolge zu bringen, das ich das hinterher auch so auf dem Monitor sehe - und das ohne irgendwelche Fehlermeldungen - wie ich mir das vorgestellt habe, krieg ich selbst bei wenig komplexen Aufgaben nicht hin.

Auch die Anfragen im WordPress-Forum halfen mir nicht wirklich weiter. Zwar funktionierte es zwar annähernd wie es sollte, aber die Problematik plötzlich Seitenweise ein und denselben Post bzw. nur bestimmte Posts vorzufinden, war ja auch nicht gewollt.

Gott sei Dank, und das habe ich ja erst die Tage erwähnt, gibts das Crazy Girl. Als ich ihr in einem Antwort-Kommentar schrieb, das ich mir beim Versuch etwas zu Coden im Gegensatz zu ihr ja immer einen abbreche, schickte sie mir gestern abend erst ein theoretisches Gerüst, wie das aussehen könnte. Später kam dann per EMail noch der entsprechende Code.

Und wie gesagt: Es scheint mir fast so zu sein, das Tanja sich hinsetzt, etwas grübelt, und ihr dann der - auch noch richtige - Code aus den Fingern fließt. Denn ich brauchte eigentlich nichts mehr daran schrauben, sondern ihn nur noch an meine Wünsche anzupassen. Das wiederum kriege ich dann doch tatsächlich noch hin 🙂

Und so sieht Tanjas Code in reinform aus:

1
2
3
4
5
6
7
8
9
10
<?php 
function filter_where($where = '') {		
  $where .= " AND post_date >= '" . date('Y-m-d', strtotime('-60 days')) . "'";
  return $where;
}
add_filter('posts_where', 'filter_where');
query_posts("showposts=1&&orderby=rand");
 while (have_posts()) : the_post(); 
php endwhile;
remove_filter('posts_where', 'filter_where'); ?>

Ich möchte nun mit meinem beschränkten Wissen versuchen, den Code zu erklären. Sollte ich Müll geschrieben haben, teilt mir das bitte mit.

Erst wird in Zeile 2 die Filter-Funktion erstellt, die angibt, welche Bedingung - die in Zeile 3 steht - erfüllt sein muss, für das was später angezeigt bzw. ausgeführt werden soll.

In diesem Fall soll das Artikel-Datum kleiner sein als heute minus 60 Tage. Würde man hier statt dem 'Kleiner-als'- das 'Grösser-als'-Zeichen einsetzen, würden nur Artikel gesucht, die maximal die angegebene Anzahl Tage alt sind.

Zeile 4 lässt die Abarbeitung zur Zeile 3 zurückspringen, bis auf einen Artikel getroffen wurde, der die Forderung erfüllt.

Nun wird durch Zeile 6 der Filter aufgerufen und query_posts in Zeile 7 gibt in dem Code 5 zufällig ausgewählte Posts aus, auf die die Anforderung aus Zeile 3, 'Älter als heute minus 60 Tage zu sein, zutrifft. In meinem Fall habe ich die 5 durch eine 1 ersetzt, da ich ja nur einen Artikel anzeigen lasse.

Mit der while-Anweisung in Zeile 8 wird eine Schleife eröffnet, die solange durchlaufen wird, wie eben solch ein Post gefunden wird. Da in den seltensten Fällen zwei und mehr Monate alte Posts in einem Blog gelöscht werden also immer.

Zeile 9 beendet die Schleife und Zeile 10 setzt die query-Anfrage zurück. Last not least wird mit der letzten Zeile der Filter gelöscht.

Wie gesagt, ein herzliches und Großes Danke schön an Tanja, das sie sich die Arbeit gemacht hat, mir den Code zu basteln. Und wie erwähnt: Sollte ich beim Versuch, den Code zu erklären, absoluten Blödsinn geschrieben haben, teilt mir das bitte mit.

Update 19.09.11: Mit Hilfe eines Codeschnippsels von perun ist es mir nun gelungen, den Zufalls-Post wirklich nur auf der 1. Seite anzuzeigen und nicht mehr auf jeder Seite als 3. Post.

Marcus
Über Marcus 702 Artikel
Ich freue mich über Deinen Besuch auf meinem Blog! Wenn Dir der Artikel gefallen hat, teile ihn doch mit anderen und hinterlasse Deine Meinung. Mehr über mich gibt es hier zu lesen

Hinterlasse jetzt einen Kommentar

Kommentar hinterlassen

E-Mail Adresse wird nicht veröffentlicht.


*


CommentLuv - verlinke einen deiner Blog-Artikel