A plugin for adding the post date to wp_get_archives

The WordPress function wp_get_archives(’type=postbypost’) displays a lovely list of posts, but won’t show the date of each post. This plugin adds each post’s date to those ‘postbypost’ lists, like so:

Recently

Usage

  1. Upload and activate the plugin
  2. Edit your theme, replacing wp_get_archives('type=postbypost') with ard_get_archives();

The function ard_get_archives(); replaces wp_get_archives('type=postbypost'), meaning you don’t need to specify type=postbypost. You can use all of the wp_get_archives() parameters except ‘type’ and ’show_post_count’ (limit, format, before, and after). In addition, there’s a new parameter: show_post_date, that you can use to hide the date, but the plugin will show the date by default.

show_post_date
(boolean) Display date of posts in an archive (1 – true) or do not (0 – false). For use with ard_get_archives(). Defaults to 1 (true).

Customizing the date

By default, the plugin displays the date as “(MM/DD/YYYY)”, but you can change this to use any standard PHP date characters by editing the plugin at the line:

$arc_date = date('m/d/Y', strtotime($arcresult->post_date));  // new

The date is wrapped in <span class="recentdate"> tags, so you can style the date independently of the link.

How does it work?

The plugin replaces the ‘postbypost’ part of the function wp_get_archives, and adds the date to $before. The relevant code is below. You can compare it to the corresponding lines in general-template.php.

	} elseif ( ( 'postbypost' == $type ) || ('alpha' == $type) ) {
		('alpha' == $type) ? $orderby = "post_title ASC " : $orderby = "post_date DESC ";
		$arcresults = $wpdb->get_results("SELECT * FROM $wpdb->posts $join $where ORDER BY $orderby $limit");
		if ( $arcresults ) {
			$beforebefore = $before;  // new
			foreach ( $arcresults as $arcresult ) {
				if ( $arcresult->post_date != '0000-00-00 00:00:00' ) {
					$url  = get_permalink($arcresult);
					$arc_title = $arcresult->post_title;
					$arc_date = date('m/d/Y', strtotime($arcresult->post_date));  // new
					if ( $show_post_date )  // new
						$before = $beforebefore . '<span class="recentdate">' . $arc_date . '</span>';  // new
					if ( $arc_title )
						$text = strip_tags(apply_filters('the_title', $arc_title));
					else
						$text = $arcresult->ID;
					echo get_archives_link($url, $text, $format, $before, $after);
				}
			}
		}
	}

The lines ending in ‘// new’ are the only changes.

So you want the date to appear after the title? Edit the plugin to modify $after, instead:

	} elseif ( ( 'postbypost' == $type ) || ('alpha' == $type) ) {
		('alpha' == $type) ? $orderby = "post_title ASC " : $orderby = "post_date DESC ";
		$arcresults = $wpdb->get_results("SELECT * FROM $wpdb->posts $join $where ORDER BY $orderby $limit");
		if ( $arcresults ) {
			$afterafter = $after;  // new
			foreach ( $arcresults as $arcresult ) {
				if ( $arcresult->post_date != '0000-00-00 00:00:00' ) {
					$url  = get_permalink($arcresult);
					$arc_title = $arcresult->post_title;
					$arc_date = date('j F Y', strtotime($arcresult->post_date));  // new
					if ( $show_post_date )  // new
						$after = '&nbsp;(' . $arc_date . ')' . $afterafter;  // new
					if ( $arc_title )
						$text = strip_tags(apply_filters('the_title', $arc_title));
					else
						$text = $arcresult->ID;
					echo get_archives_link($url, $text, $format, $before, $after);
				}
			}
		}
	}

Download

Get the files here: (Current version: 0.1 beta)

Download the DateMe WordPress Plugin

  • E-mail this story to a friend!
  • Facebook
  • Digg
  • StumbleUpon
  • del.icio.us
  • Google Bookmarks
  • Technorati
  • LinkedIn
  • Reddit
  • MySpace
  • Slashdot
  • SphereIt
  • Sphinn
  • Mixx

14 Responses to “A plugin for adding the post date to wp_get_archives”

  1. Iris says:

    Nice plugin! One question..is it possible to exclude certain authors off the archive list? Can’t figure that out, and I want to hide certain posts from appearing on the archive page.
    I did the trick on ‘recent_posts’ but I don’t want them showing up in the archives then either. Is there someone who can help me out?
    Thanks!

  2. Pete Roome says:

    OK this plugin seems to work great thanks. Just one question? How do i restrict the number of posts?

  3. Pete Roome says:

    Sorry my bad. Should have looked a bit harder before asking that question…for anyone else, there is some defaults at the top of the plugins php code. Cheers again this plugin is very handy.

  4. [...] 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 [...]

  5. Rom says:

    Hey thanks, nice plugin

  6. Jo says:

    Hey, thanks for that Plugin.

    I modified it a bit so that you can set for example German month names if you set for example “d. F Y” as the date format.

    Should I post you the code?

  7. Trish says:

    Thanks for this! Works brilliantly!

  8. Susan says:

    Thank you! This is a great plugin.

  9. Louis says:

    Worked like a charm. Thanks.

  10. sweet says:

    in what file can i find the “wp_get_archives()” function?
    thank you & more power!

  11. sweet says:

    How can I make the date appear in my tab of recent posts? I replaced the wp_get_archives(); in the header and the footer. It works but when i try to replace it in the sidebar it does not work. Can you help me with this matter? Thanks!

  12. lotech says:

    Thanks – any plans to extend this to do a posts category too?
    Want to make a menu like so from the last 5 posts –
    Category \ Post Name
    Category2 \ Post Name2
    etc…

  13. Dave Walker says:

    A great plugin. Many thanks :o )

  14. Yogi says:

    Just what I needed, thanks for sharing!

Leave a Reply

Wrap code snippets in <code></code> tags.