WP – neue Einträge besonders kennzeichnen

NeuEs ist eine schöne Sache, wenn man den aktuellen Artikel im Weblog besonders kennzeichnet. Es ist nicht unbedingt notwendig, aber ich finde es recht schön und habe mir ein wenig Gedanken darüber gemacht, wie man dies mit WordPress lösen kann.

Plugins

Nun gibt es auch dafür Plugins, z.B. kann man mit Updated Today Plugin ein Bild auf der Hauptseite darstellen, dabei wird verglichen, ob das heutige Datum mit dem Datum des Beitrags übereinstimmt.
Aber wozu ein Plugin, wenn man das ganze viel einfacher und vorallem viel besser anpassbar, in das Theme einbauen kann.

Alex King bietet ein Plugin - WP Since Last Visit, welches noch ein wenig weiter geht und mit Hilfe von Cookies abfragt, welche Beiträge der Besucher der Website noch nicht gesehen hat und markiert die dann mit einem Icon.

Wie gehts?

Um das ganze auf der Startseite zu sehen, insofern dort die aktuellen Posts dargestellt werden, muss die index.php des verwendeten Themes bearbeitet werden.

Einige Erläuterungen zum Code habe ich hinter die Anweisungen geschrieben und der Code ist ein wenig aufgeblasen erstellt, damit sich die Hintergründe besser verstehen lassen. Für die PHP-Kenner kann noch einiges zusammen gefasst werden.
Im Beispielfall wird ein Bild für den aktuellen Beitrag, der das gleiche Herausgeberdatum haben muss, wie es aktuell ist, erstellt. In der zweiten Abfrage gehe ich über einen gewissen Zeitraum, im diesem Fall die letzten 5 Tage (-5), und erstelle ein anderes Bild. Soll in der Zukunft gerechnet werden, so muss ein positiver Wert vergeben werden.
Der Code muss dort eingebracht werden, wo später die Ausgabe erscheinen soll, zum Beispiel über der Überschrift des Beitrags - h2.

Das Bild wird jeweils mit der Klasse fb_newpost formatiert, dazu einfach das Stylesheet bearbeiten.


<?php
global $wpdb;
$fb_date_sql = current_time('mysql'); //date today
$fb_date_today = substr($fb_date_sql, 0, 10); //string 0-10 if date today
$fb_postdate = mysql2date('Y-m-d', $post->post_date); // date of post
$my_time = strtotime($fb_date_today); //converts date string to UNIX timestamp
$timestamp = $my_time + (-5 * 86400); //calculates # of days passed ($num_days) * # seconds in a day (86400)
$return_date = date("Y-m-d", $timestamp);  //puts the UNIX timestamp back into string format);		
if ($fb_postdate == $fb_date_today) { ?>
	

heute

<?php } if ($fb_postdate > $return_date) { ?>

Neu

<?php } ?>

Anmerkung

Normalerweise kann man bei WordPress das Datum des Beitrags mit dem Template-Tag the_date auslesen. Leider hatte ich Problem, wenn es mehrere Posts an einem Tag gab, dann wurde das Datum nur im letzten Beitrag ausgelesen. Mit the_time kann man die Ausgabe nicht unterbinden, so dass ich mich für die sql-Abfrage entschieden habe.


$fb_postdate = the_date('Y-m-d', '', '', False); // Tag

$fb_postdate = mysql2date('Y-m-d', $post->post_date); // sql

6 Kommentare

  1. Nette Idee. Und ist in codex.wordpress.org auch schon dokumentiert (Abschnitt "Date-Based Differences")
    Dort findest du dann auch die Funktion get_the_date. Obwohl es diese Funktion gar nicht (mehr) gibt. Egal 😉

    Dafür kannst du mit get_the_time die Ausgabe unterdrücken. Die Funktionen bei WP sind oft so ausgelegt, dass man mit the_function eine Ausgabe bekommt. Wohingegen man mit get_the_function den Wert in einer Variable übertragen kann. Ist leider nicht konsequent bei allen Funktionen umgesetzt (s.o.)
    Aber get_the_time ist auch nur eine WP typische Krücke die wiederum auf get_post_time() zurück greift. Ab und zu lohnt es sich in die Abgründe... ähm Tiefen von WP abzusteigen und sich mal die Dateien in wp-includes anzuschauen. Aber dann wird einem auch schnell klar wie umständlich WP zusammen geschraubt ist.

    Fazit:
    Deine Lösung ist eigentlich die optimalere da sie nicht erst zwei oder drei andere Funktionen aufruft, sondern direkt auf das Array mit den verfügbaren Daten zugreift.
    Im Hinblick auf Kompatibilität mit zukünftigen und älteren WP-Versionen sollte man wohl besser auf die WP-Funktionen zurückgreifen.

    Und eine kleine Randbemerkung noch: Jonny Haeusler hatte mal vor langer Zeit gefragt ob man Einträge "verblassen" lassen kann. Wie man sieht, kann man das. Und wenn es auf den ersten Blick keinen Sinn macht, dann auf den zweiten. Nämlich dann, wenn man mit seinem Blog eine Art Veranstaltungskalender umsetzt. Alte, bereits gelaufene Events könnte man dann ausgegraut darstellen. Zukünftige und aktuelle in einer lesbaren Form.

  2. Morgen Ralf,
    herzlichen Dank für die Anmerkungen, die wie immer von fir, sehr interessant und hilfreich sind.
    ** Sorry, dass ich auf deine Mail nicht geantwortet habe, bin erst seit eben wieder online. Die letzten Tage lief hier alles ohne PC - muss auch mal sein.
    LG Frank

  3. ähhh, Weblogs sind doch eh in umgekehrter chronologischer Reihenfolge... ich wüsste nicht, wozu da solch eine Kennzeichnung nützlich wäre (es sei denn, die Besucher leiden an Alzheimer).

  4. Ach Frank, ich habe die Tage ohne großen Mailverkehr genossen. Macht nichts 😉

    @Pepino:
    Sind sie das? Oder müssen sie das sein? Also mir fallen spontan noch ein paar Sachen ein wo ich ganz gerne anhand des Datums Beiträge unterschiedlich kennzeichnen würde.
    Hat man des öfteren Updates eines Beitrages, so könnte hier natürlich ebenfalls ein Eyecatcher hilfreich sein. Oder wenn man verschiedene Kategorien in einer Übersicht darstellt, ist es recht hilfreich die neueren Beiträge zu markieren.
    Und nicht zu letzt ein Hinweis an die netten Googlebesucher. Es kam schon vor das ich in einen meiner Weblogs Kommentare auf teilweise 2 Jahre alte Einträge bekommen hatte. Die Kommentatoren dachten aber wohl das es sich um aktuelle Einträge handelte da sie offensichtlich nicht auf das Datum geachtet haben.

    Wenn man sein Blog puristisch und chronologisch führt, dann hast du natürlich Recht.

Kommentare sind geschlossen.