WordPress Plugin: Recent Posts grouped by year, month, and day
Friday, October 26th, 2007 by Favio
Since a simple list of the recent blog posts looks really boring (ok, maybe the content is the origin of boredom), I wanted to group those posts by year, month and day.
The nearest match to what I wanted was A plugin for adding the post date to wp_get_archives. I based my plugin on Oliver Baty's plugin. Thanks for putting up the code to download, it was really helpful. (^_^)
However, before the coding started, there was a need to conduct a more aggressive search; just in case there was already a Plugin that did the same thing I wished.
The result was negative. It is understandable, since this kind of Plugin affects the presentation layer. Finding a "recent posts" plugin that fits everybody is impossible. Mental note: if I ever get to program a big complex WP Plugin, I'll go with the functional side, instead of the behavioral or presentational one; would be cool to follow this guide too.
Plugin source and documentation
Download the source. It's open. ;)
-
<?php
-
/*
-
Plugin Name: favrik Recent Posts
-
Plugin URI: http://blog.favrik.com/
-
Description: Display recent posts by date: 1) grouping by year, month,day, and 2) just the date at the left side of the title. Based on the work by <a href="http://www.ardamis.com">Oliver Baty</a>. <a href=" http://www.ardamis.com/2007/06/25/adding-the-post-date-to-wp_get_archives/">Details are here</a>.
-
Version: 0.1
-
Author: Favio Manriquez
-
Author URI: http://blog.favrik.com
-
Copyright 2007 Favio Manriquez (email : favio@favrik.com)
-
This program is free software; you can redistribute it and/or modify
-
it under the terms of the GNU General Public License as published by
-
the Free Software Foundation; either version 2 of the License, or
-
(at your option) any later version.
-
This program is distributed in the hope that it will be useful,
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-
GNU General Public License for more details.
-
You should have received a copy of the GNU General Public License
-
along with this program; if not, write to the Free Software
-
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
*/
-
-
/**
-
Most important configuration variable is $group:
-
0 - Just put the date at the left side.
-
1 - Group by year, month, and day.
-
*/
-
function favrik_recent_posts($args = '') {
-
-
// params fun
-
$defaults = array('group' => '1', 'limit' => '10', 'before' => '<li>', 'after' => '</li>', 'show_post_count' => false, 'show_post_date' => true, 'date' => 'F jS, Y', 'order_by' => 'post_date DESC');
-
-
// output
-
$output = '';
-
$pre = '';
-
$full_date = '';
-
$year = '';
-
$month = '';
-
$day = '';
-
-
// the query
-
$where = apply_filters('getarchives_where', "WHERE post_type = 'post' AND post_status = 'publish'");
-
$join = apply_filters('getarchives_join', "");
-
$qry = "SELECT ID, post_date, post_title, post_name
-
FROM $wpdb->posts $join
-
$where ORDER BY $order_by LIMIT $limit";
-
$arcresults = $wpdb->get_results($qry);
-
if ($arcresults) {
-
foreach ($arcresults as $arcresult) {
-
if ($arcresult->post_date != '0000-00-00 00:00:00') {
-
$url = get_permalink($arcresult);
-
if ($group == 0) { // dates at the side of the post link
-
$full_date = '<em class="date">' . $arc_date . '</em> ';
-
}
-
if ($group == 1) { // grouping by year then month-day
-
if ($year != $y) {
-
$year = $y;
-
$pre = '<li class="year">' . $year . '</li>';
-
}
-
if ($month != $m) {
-
$month = $m;
-
}
-
if ($day != $d) {
-
$day = $d;
-
$full_date = '<em>' . $day . '</em>';
-
}
-
}
-
$output .= get_archives_link($url, $text, $format,
-
$pre . $before . $full_date,
-
$after);
-
$pre = ''; $full_date = '';
-
}
-
}
-
}
-
echo $output;
-
}
-
?>
How to use it
Upload to your server and activate the plugin at WordPress admin interface. And try these variations in a template:
-
<ul id="recent-posts">
-
<?php favrik_recent_posts('group=1&limit=5'); ?>
-
</ul>
-
-
<ul id="recent-posts">
-
<?php favrik_recent_posts('group=0&limit=5'); ?>
-
</ul>
The limit parameter tells how many posts to display at max. The group parameter sets how the post are going to be displayed:
0 - Just put the date at the left side.
1 - Group by year, month, and day.
What now?
I can imagine several ways of customizing a recent posts list. Fortunately, it's an easy task when you have so many code snippets available. Gg.
This entry was posted on Friday, October 26th, 2007 at 3:23 am and is filed under PHP. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.
