smart | Webentwicklung
Alles rund um HTML5, PHP, WordPress & Co.

WordPress: Individuelles wp_get_archives erstellen

6. Juli 2012
Stephan
WordPress

In diesem Artikel zeige ich euch, wie ihr die WordPress-Funktion wp_get_archives nachbauen könnt und so die Ausgabe und dessen Markup selbst definieren könnt.

Leider scheint es für wp_get_archives im Gegensatz zu wp_nav_menu keine eigene Walker-Klasse zu geben, die man einfach ableiten könnte. Also müssen wir uns eine eigene Funktion erstellen, die letztendlich das gleiche macht wie wp_get_archives nur mit dem Unterschied, dass wir volle Kontrolle über das Ausgabe-Markup haben.

Der Code zum Ermitteln der Archiv-Daten

Den folgenden Code könnt ihr so wie er ist in eure functions.php übernehmen:

function get_custom_archive_list()
{
    global $wpdb, $wp_locale;

    $results = $wpdb->get_results('
        SELECT
            YEAR(post_date) AS post_year, 
            MONTH(post_date) AS post_month, 
            COUNT(ID) AS post_count
    	FROM
    	  ' . $wpdb->posts . '
    	WHERE
    	    post_type = "post"
    	    AND post_status = "publish"
    	GROUP BY
    	    post_month, post_year
    	ORDER BY
    	    post_date DESC
    ');

    $output = '';

    foreach($results as $row)
    {
        $month = $wp_locale->get_month($row->post_month);
        $year = $row->post_year;
        $url = get_month_link($row->post_year, $row->post_month);
        $output .= '<a href="'.$url.'" title="Alle Artikel von '.$month.' '.$year.' anzeigen">'.$month.' '.$year.' ('.$row->post_count.')</a>';
    }

    return $output;
}

Im ersten Teil dieser Funktion (Zeile 5 – 19) werden die Daten für unsere zu erstellende Archiv-Liste aus der Datenbank geholt. Im zweiten Teil (Zeile 21 – 29) wird dann die Archiv-Liste bzw. die Ausgabe der Liste erstellt.

In diesem Beispiel erstellen wir für jeden Monat einen Link, der den ausgeschriebenen Monatsnamen, das Jahr und in Klammern die Anzahl der Artikel die in dem Monat veröffentlicht wurde, erstellt.

Kurze Erklärung der SQL-Anweisung im Detail

SELECT (Zeile 6 – 9)
Selektiert werden das Jahr, der Monat und die Anzahl der Artikel, die in der jeweiligen Monat/Jahr-Kombination veröffentlicht wurden.

FROM (Zeile 10 – 11)
Wir beziehen uns hier lediglich auf die posts-Tabelle von WordPress.

WHERE (Zeile 12 – 14)
Zu den Bedingungen zählen folgende Punkte:

  • der Artikel- bzw. Post-Typ ist ein Artikel/Post und z.B. nicht eine Seite
  • der Artikel wurde bereits veröffentlicht

GROUP BY & ORDER BY (Zeile 15 – 18)
Gruppiert wird die Anfrage nach Monat und Jahr, um so alle Artikel in einem bestimmten Monat eines bestimmten Jahres zu ermitteln. Anschließend werden die selektierten Datensätze noch absteigend nach dem Datum sortiert.

Der Code zum Anzeigen der Archiv-Liste

Der folgende Code kann wie immer an beliebige Stelle in eurem WordPress-Theme platziert werden. Möchtet ihr also z.B. die Archiv-Liste in der Sidebar anzeigen, kann man den folgenden Code z.B. in die sidebar.php einfügen.

echo get_custom_archive_list();

Fazit

Je nachdem, wie ihr die Ausgabe haben wollt, könnt ihr den Beispiel-Code natürlich individuell anpassen.

Beispielweise könntet ihr die Links auch in eine Liste (<ul></ul>) packen oder die Anzahl der Artikel des jeweiligen Monats nichts anzeigen.

Was haltet ihr von dieser Möglichkeit die Archiv-Liste eures Blogs anzuzeigen? Hat euch bisher die Standard-Funktion wp_get_archives ausgreicht oder hattet ihr öfters auch schon den Wunsch mehr Einstellungsmöglichkeiten zu haben?

Kommentare  
0 Kommentare vorhanden
0 Trackbacks/Pingbacks vorhanden
Du bist herzlich eingeladen auch ein Kommentar zu hinterlassen!
Kommentar schreiben

Vielen Dank für dein Kommentar!