WordPress-Plugin: A Year Before

In english — or something similar

(Dieser Beitrag stammt ursprünglich aus dem Würzblog. Ich habe ihn aber in dieses Blog verlegt, da er hier thematisch besser passt)

Wenn ein Blog länger besteht, dann ist es ja fast schon ein historisches Dokument. Und so kann es interessant sein, was so vor einem Jahr im Blog passiert ist.

Zumindest stellte sich dieses Problem dem Würzblog. Eine grobe Recherche brachte mir kein Plugin für WordPress, dass mir diese Funktionalität bot. (Falls ich es einfach nur übersehen habe, dann gibt es jetzt ein Zweites. ;-)) Also habe ich mal schnell eines selbst geschrieben. 🙂

Übersicht

Mit „A Year Before“ kann man Blogbeträge anzeigen lassen, die vor einer bestimmten Zeitspanne im Blog veröffentlich wurden. So kann man in einer „historischen Ecke“ zeigen lassen, was vor z. B. 30 Tagen, 6 Monaten oder einem Jahr im Blog passierte.

Das Plugin ist nach wie vor im Beta-Stadium, ich garantiere also noch nicht, dass auch alles funktioniert. Aber beim Testen ist noch nichts Schlimmes passiert … 😉

Installation

Das Plugin aus dem WordPress-Repository herunterladen und das Verzeichnis a-year-before mit den darinliegenden Dateien in den Plugin-Ordner von WordPress schieben. Dann A Year Before bei den Plugins in der WordPress-Administration aktivieren.

Als Widget

Wenn man die Widget-Funktion von WordPress nutzt, dann ist der Rest sehr simpel. Einfach in der Widget-Verwaltung A Year Before auf die Sidebar ziehen. Bei Bedarf kann man im Popup-Dialog alles Mögliche einstellen.

Man kann die Plugin-Ausgabe über ein Muster steuern. Mögliche Platzhalter sind:

* %title% Der Titel des Artikels
* %link% Der Link zum Artikel
* %date% Das Datum des Artikels
* %excerpt% Der Auszugs des Artikels. Man kann die Länge des Auszugs mitangeben, so zeigt %excerpt80% die ersten 80 Zeichen an.

Beispiel eines Musters: %date%: <a href="%link%">%title%<br/>%excerpt40%</a>

Als PHP-Code

Im Template — die Sidebar bietet sich dafür an — an die Stelle, an der die Beitragsliste erscheinen soll, folgenden PHP-Code einfügen:

<?php if (function_exists("ayb_posts")) { ?>
<div class="box">
<h2>Vor einem Jahr</h2>
<ul>
<?php ayb_posts(); ?>
</ul>
</div>
<?php } ?>

Entscheidend ist die Zeile <?php ayb_posts(); ?>, hier werden die zurückliegenden Beiträge ausgegeben. Alles andere ist nur Beiwerk, das auch kurz erwähnt werden soll. Die erste und letzte PHP-Zeile sorgen nur dafür, dass keine Fehler auftritt, wenn das Plugin nicht installiert oder aktiviert ist. Das DIV ist ein Containerelement, mit dem man den ganzen Block mittels CSS gestalten könnte. Das H2 ist die Überschrift über der Liste, das UL erzeugt eine Liste — dazu später mehr.

Werden beim Aufruf von ayb_posts keine Parameter in den Klammern angegeben, dann gibt das Plugin die Beiträge inklusive Datum als Listenelemente aus, die vor einem Jahr gebloggt wurden.

Konfiguration

Die Optionen für das Plugin wird in folgender Form übergeben:
parameter1=wert1&parameter2=wert2&parameter3=wert3 ...

Folgende Parameter stehen zur Verfügung:

  • day gibt die Anzahl der Tage an, vor denen die Beiträge angezeigt werden sollen.
  • month gibt die Anzahl der Monate an, vor denen die Beiträge angezeigt werden sollen.
  • year gibt die Anzahl der Jahre an, vor denen die Beiträge angezeigt werden sollen.
  • before gibt HTML-Code an, der vor jedem alten Beitrag steht. Standardmäßig das Listenelement <li>
  • after gibt HTML-Code an, der nach jedem alten Beitrag steht. Standardmäßig das Listenelementende </li>
  • showdate schaltet die Anzeige des Datums vor jedem Beitrag ein (Wert=1, Standardwert) oder aus (Wert=0)
  • dateformat ist für die Formatierung des angezeigten Datums vor den Beiträgen. Die Formatangaben sind analog zum PHP-Befehl date. Als Standard dient die deutsche Datumskurzform „d.m.y“, was z. B. zur Ausgabe 27.12.06 führt.
  • notfound ist der Text der ausgegeben wird, wenn keine Beträge an dem Tag gefunden wurden.
  • range gibt eine Anzahl von Tagen an, die in Richtung Zukunft nach Artikeln gesucht wird, wenn am gwünschten Tag kein Beitrag geschrieben wurde.
  • anniversary steuert den „Jahrestag-Modus“. Wenn auf 1 gesetzt gibt das Plugin alle Artikel aus, die an diesem Tag in dem Monat über die Jahre geschrieben wurden. Die Parameters „day“, „month“, „year“ und „range“ werden ignoriert.
  • posts_max legt die Anzahl der Artikel fest, die angezeigt werden. 0 steht für „alle“.

Beispiele:
ayb_posts("day=30&before=&after=&showdate=0");
Zeigt die Blogbeiträge von vor 30 Tagen an, ohne das Datum anzuzeigen. Die Beiträge werden nicht als Listenelemente ausgegeben, sondern einfach mit einem Zeilenumbruch hinter jedem Beitrag.

ayb_posts("month=6&day=14&notfound=An dem Tag wurde nix gebloggt");
Die Beiträge vor einem halben Jahr und zwei Wochen werden gelistet, inklusive Datum. Wurde an dem Datum kein Artikel geschrieben, dann wird der Text „An dem Tag wurde nix gebloggt“ ausgegeben.

ayb_posts(„range=14&dateformat=y-m-d“);
Schaut ob es vor einem Jahr Artikel geschrieben wurden. Wenn nicht, schaut das Plugin, ob in den nächsten  14 Tagen etwas geschrieben wurde und gibt die Beiträge vom nächstemöglichen Tag aus.

ayb_posts(„anniversary=1“);
Zeigt Beiträge an, die am selben Tag und im selben Monat wie das aktuelle Datum geschrieben wurden, unabhängig vom Jahr. Also alle Artikel, die heute vor einem Jahr, vor zwei Jahren, vor drei Jahren und so weiter geschrieben wurden.

Für Freunde des CSS gibt es auch die Möglichkeit, das Datum über die Klasse ayb_date, den Link über ayb_link und die notfound-Nachricht über ayb_notfound gestalten.

Änderungen / Changelog

1.0.3
Die h3-Tags im Widget-Titel werden wieder angezeigt (genauer gesagt die  before- und after-titles) (Danke an HDS für den Hinweis)

1.0.1
Bessere Unterstützung von PHP 7

1.0

Neu: #thumbnail‘-Muster um Beitragsbilder von Artikeln zu zeigen

0.9.5

PHP-Notices behoben (Patch von lostfocus https://gist.github.com/lostfocus/a68f0689d20feceb7911 )

0.9.4

  • Fix (nochmals): Manchmal werden andere Post-Typen (zum Beispiel Menüpunkt) als Artikel und Seiten angezeigt

0.9.3

  • Fix: Fehler mit PHP 5.3, wenn es im Template mit PHP aufgerufen wird.

0.9.2

  • Fix: Manchmal werden andere Post-Typen als Artikel und Seiten angezeigt

0.9.1

  • Kleinen Bugfix, bei manchen Systemen kam es zu Dastellungsproblemen in der Plugin-Übersicht im Backend

 0.9

  • Maximale Anzahl der angezeigten Artikel festlegen
  • kleinere Bugfixes

0.8

  • Zeige Seiten an oder auch nicht
  • Entweder öffentliche oder private Artikel werden angezeigt — oder auch beide.
  • Die Ausgabe kann über Muster angepasst werden: %link%, %title%, %date%, %excerpt% (Danke an Marcus von themenfreund.de für die excerpt-Idee)
  • WordPress-Widget-Klasse wird verwendet (Plugin funktioniert nur ab WordPress 2.8+)
  • OOP-Programmierung

0.7.1

  • fix: Wegen einem Problem in der gettext-Funktion bei PHP/Apache geben manche Server Fehlermeldungen aus. Um diesen Fehler zu vermeiden, muss ich leider die Übersetzungmöglichkeit des Widgets abschalten. Die Funktionalität bleibt voll erhalten, nur die Sprache des Widgets ist nur immer Englisch.

0.7

  • anniversary-Modus für die Suche an Artikeln am selben Tag in den letzten Jahren
  • range-Parameter für Bereichssuche
  • Beachtung von Zeitzonen
  • Bugfixes

0.6.1

  • Bugfix für Sidebars, die nicht „sidebar“ heißen.

0.6

  • Plugin kann als WordPress-Widget genutzt werden
  • Lokalisierung

0.5.3

  • XHTML-Bugfix (überflüssiges span
  • Bugfix PHP 5 bei leeren Funktionsparameter

0.5.2

  • Bugfix für tolerantere Zeitangaben (z.B. day > 364). Danke an AlohaDan für den Hinweis und Test.

0.5.1

  • Anpassung an MySQL-Versionen älter als MySQL 4.1.1

0.5

  • Erste öffentliche Betaversion

Download

a-year-before.zip (Version 0.9.3)

22 Gedanken zu „WordPress-Plugin: A Year Before“

  1. Hallo Ralf,
    Ich suche eine Möglichkeit das Plugin evtl. So zu verwenden wie Facebook es macht indem mich Facebook erinnert und sagt heute vor einem Jahr , heute vor zwei Jahren etc.
    also in bestimmten Intervallen .
    Ist das möglich oder gibt es so etwas?

    Über eine Antwort würde ich mich freuen !

    Antworten
    • Hi Stefan!
      Ja, das geht mit dem Plugin. Entweder im Widget z.B. bei Jahr eine „2“ für „heute vor zwei Jahren“ eintragen oder wenn du es im Theme selbst einträgst, mit ayb_posts(„anniversary=2“);

      Gruß,
      Ralf …

      Antworten
  2. Hello Ralf,

    Week ago I have asked for your permission to translate your A Year Before plugin in Spanish and I didn’t hear any from you since. I hope that you will find time to provide the reply, because we believe that the translation would be of a great use. You can reply me directly on andrewk@webhostinghub.com

    All the best,

    Andrew Kurtis

    WebHostingHub

    Antworten
  3. Great plugin, but I’m encountering the occasional error. For example, if you look at http://www.cnyradio.com today, you’ll see the plugin is used in one of my sidebar widgets. There are several blank entries. There are also entries for menu items which must have been created on this date… but (a) the links don’t work and (b) these are menu items, not articles — so they shouldn’t be appearing anyway. Any chance for a bug fix on this?

    Antworten
  4. Hallo! Super Plugin
    Habe den Jahrestag Modus aktiviert. Kann ich im Widget irgendwie einstellen, dass range Funktion möglich ist. Ich möchte Beiträge die vor 1,2,3 Jahren usw angezeigt werden und eine Woche im voraus schon gelistet sind. Danke

    Antworten
  5. Hi, ich hab auch das Problem, dass keine Beiträge mehr gefunden werden, obwohl es die definitiv geben müsste. Kannst du mal ein Update mit nem Fix rausbringen, bittebittebitte?

    Antworten
  6. Das Plugin verursachte eine Fehlermeldung 1 Zeichen unerwartete Ausgabe während der
    Aktivierung. Sollte du Fehlermeldungen wie “headers already sent”, Probleme mit
    der Syndizierung der Feeds oder andere Fehler erhalten, versuche das Plugin zu
    deaktivieren oder zu löschen.

    und hier der php-fehler

    Warning: Cannot modify header information – headers already sent by (output started at /home/content/…/…/html/wp-content/plugins/a-year-before/ayb_posts.php:733) in /home/content/…/…/html/wp-includes/pluggable.php on line 881

    Es läuft also leider nicht mit der aktuellen WP-Version.

    Antworten
  7. Leider wird seit dem neuesten Update der vor einem Jahr geschriebene Artikel angezeigt, allerdings nicht mehr verlinkt. Ich nnutze das Widget und möchte nur sehr ungern auf dieses klasse Plugin verzichten. Vielleicht kannst Du ja helfen?

    Antworten

Schreibe einen Kommentar