The date.php template is used when browsing by date, instead of title. For example:
?php
/*
date.php - calendar based archive navigation
copyright (c) 2005 Scott Merrill (skippy@skippy.net)
Released under the terms of the GNU GPL version 2
http://www.gnu.org/licenses/gpl.html
*/
$weekdaynames = array(0 => __('Sunday'), 1 => __('Monday'), 2 => __('Tuesday'),3 => __('Wednesday'), 4 => __('Thursday'), 5 =>
__('Friday'), 6 => __('Saturday'));
// what year and month is this?
if (have_posts()) {
$ye = mysql2date('Y', $wp_query->posts[0]->post_date);
$mo = mysql2date('m', $wp_query->posts[0]->post_date);
$da = mysql2date('d', $wp_query->posts[0]->post_date);
}
// http://us2.php.net/manual/en/ref.calendar.php#26773
function days_in_month($month, $year) {
$daysInMonth = array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
if ($month != 2) {
return $daysInMonth[$month - 1];
}
return (checkdate($month, 29, $year)) ? 29 : 28;
}
///////////////////////////////////////////////////////
function get_month ($posts = '', $year = '', $this_month = '', $pad = 1) {
global $wpdb, $weekdaynames, $month;
// info about this month
$days_in_month = days_in_month($this_month, $year);
$first_day_of_month = date('w', mktime(0, 0, 0, $this_month, '1', $year));
$last_day_of_month = date('w', mktime(0, 0, 0, $this_month, $days_in_month, $year));
// what day starts the week here?
$start_of_week = get_settings('start_of_week');
if (0 != $start_of_week) {
$end_of_week = 6 - (7 - $start_of_week);
} else {
$end_of_week = 7;
}
// one week here
for ($i = $start_of_week; $i < ($start_of_week + 7); $i++) {
if ($i >= 7) {
$one_week[] = $weekdaynames[$i - 7];
} else {
$one_week[] = $weekdaynames[$i];
}
}
// pad the beginning of the calendar with dates from last month
// grab any post data for those days
$pre_pad = 0;
$before = '';
if ($start_of_week != $first_day_of_month) {
if ($first_day_of_month > $start_of_week) {
$pre_pad = ($first_day_of_month - $start_of_week);
} elseif ($start_of_week > $first_day_of_month) {
$pre_pad = (7 - $start_of_week) + $first_day_of_month;
}
}
$days_in_last_month = date('t', mktime(0, 0, 0, $this_month-1, '1', $year));
if ( (0 != $pre_pad) && ($pad) ) {
$start = ($days_in_last_month - $pre_pad)+1;
$lastmonth = $this_month - 1;
$old_posts = $wpdb->get_results("SELECT * FROM $wpdb->posts WHERE post_status = 'publish' AND post_date >
'$year-$lastmonth-$start 00:00:01' AND post_date < '$year-$lastmonth-$days_in_last_month 23:59:59' ORDER BY post_date");
if ($old_posts) {
$last_month = array();
foreach ($old_posts as $post) {
$day = substr($post->post_date, 8, 2);
if (! isset($last_month[$day])) {
$last_month[$day] = "<a href=\"" . get_permalink($post->ID) . "\"
title=\"$post->post_title\">$day</a>";
} else {
$last_month[$day] = "<a href=\"" . get_settings('home') . "/$year/$lastmonth/$day\"
title=\"/$year/$lastmonth/$day\">$day</a>";
}
}
}
}
for ($i = ($days_in_last_month - $pre_pad)+1; $i <= $days_in_last_month; $i++) {
if (! $pad) {
$before .= '<td> </td>';
} else {
$before .= '<td class="lastmonth">';
if (isset($last_month[$i])) {
$before .= $last_month[$i];
} else {
$before .= $i;
}
$before .= '</td>';
}
} // end if ($pad) ...
$the_month = array();
// prepare an array for this month's posts, by date
if (! empty($posts)) {
foreach ($posts as $post) {
$day = substr($post->post_date, 8, 2);
if (10 > $day) {
$day = substr($day, 1, 1);
}
if (! isset($the_month[$day])) {
$the_month[$day] = "<a href=\"" . get_permalink($post->ID) . "\" title=\"$post->post_title\">$day</a>";
} else {
$the_month[$day] = "<a href=\"" . get_settings('home') . "/$year/$this_month/" . zeroise($day, 2) . "\"
title=\"$year/$this_month/" . zeroise($day, 2) . "\">$day</a>";
}
}
}
$daycount = $pre_pad;
$here = get_settings('home');
$cal = "<h2><a href=\"$here/$year/\" title=\"$year\">$year</a> <a href=\"$here/$year/$this_month/\"
title=\"$year/$this_month\">" .
$month[zeroise($this_month, 2)] . "</a></h2>";
$cal .= '<table><tr>';
foreach ($one_week as $day) {
$cal .= "<th>$day</th>";
}
$cal .= '</tr><tr>' . $before;
for ($i = 1; $i <= $days_in_month; $i++) {
$cal .= '<td> ';
if (isset($the_month[$i])) {
$cal .= $the_month[$i];
} else {
$cal .= $i;
}
$cal .= ' </td>';
$daycount++;
if ($daycount >= 7) {
$cal .= '</tr><tr>';
$daycount = 0;
}
}
$after = '';
// if necessary, pad the end of the calendar with dates from next month
// grab any post data for those days
if ( ($end_of_week != $last_day_of_month) && ($pad) ) {
$end = (7 - $daycount);
$nextmonth = $this_month + 1;
$new_posts = $wpdb->get_results("SELECT ID, post_title, post_date FROM $wpdb->posts WHERE post_status = 'publish' AND
post_date > '$year-$nextmonth-01 00:00:01' AND post_date < '$year-$nextmonth-0$end 23:59:59' ORDER BY post_date");
if ($new_posts) {
if (10 > $nextmonth) {
$nextmonth = "0$nextmonth";
}
$next_month = array();
foreach ($new_posts as $post) {
$day = substr($post->post_date, 9, 1);
if (! isset($next_month[$day])) {
$next_month[$day] = "<a href=\"" . get_permalink($post->ID) . "\"
title=\"$post->post_title\">$day</a>";
} else {
$next_month[$day] = "<a href=\"" . get_settings('home') . "/$year/$nextmonth/0$day\"
title=\"/$year/0$nextmonth/$day\">$day</a>";
}
}
}
}
for ($i = 1; $i <= (7 - $daycount); $i++) {
if (! $pad) {
$after .= '<td> </td>';
} else {
$after .= '<td class="lastmonth">';
if (isset($next_month[$i])) {
$after .= $next_month[$i];
} else {
$after .= $i;
}
$after .= '</td>';
}
} // end if ($pad) ...
$cal .= $after;
$cal .= '</tr></table>';
return $cal;
} //end get_month()
////////////////////////////////////////////////////
function get_year($posts = '', $year = '', $pad = 0) {
$months = array();
// first let's parse through our posts, organizing them by month
foreach ($posts as $post) {
$y = substr($post->post_date, 0, 4);
$m = substr($post->post_date, 5, 2);
$d = substr($post->post_date, 8, 2);
$months[$m][] = $post;
}
$output = '';
foreach ($months as $num => $val) {
$output .= get_month ($val, $year, $num, $pad);
}
return $output;
} // end get_year()
/////////////////////////////////////////////////////
function get_day($posts = '', $year = '', $mon = '', $day = '', $pad = 1) {
global $month;
$here = get_settings('home');
$output = "<h2><a href=\"$here/$year/\" title=\"$year\">$year</a> <a href=\"$here/$year/$mon/\" title=\"$year/$mon\">" .
$month[zeroise($mon, 2)] . "</a> <a href=\"$here/$year/$mon/$day\" title=\"$year/$mon/$day/\">$day</a></h2>";
$output .= '<table><tr><th>Time</th><th>Post</th></tr>';
// organize posts by hour
foreach ($posts as $post) {
$h = substr($post->post_date, 11, 2);
if (10 > $h) {
$h = substr($h, 1, 1);
}
$today[$h][] = $post;
}
for ($i = 0; $i <= 24; $i++) {
$output .= '<tr><td>';
if (10 > $i) {
$output .= "0$i:00";
} else {
$output .= "$i:00";
}
$output .= '</td><td>';
if (isset($today[$i])) {
if (1 == count($today[$i])) {
$output .= "<a href=\"" . get_permalink($post->ID) . "\"
title=\"$post->post_title\">$post->post_title</a>";
} else {
foreach ($today[$i] as $post) {
$output .= "<a href=\"" . get_permalink($post->ID) . "\"
title=\"$post->post_title\">$post->post_title</a><br />";
}
}
} else {
$output .= ' ';
}
$output .= '</td></tr>';
}
$output .= '</table>';
return $output;
} // end get_day()
////////////////////////////////////
if (is_year()) {
$one_year = query_posts("posts_per_page=-1&year=$ye");
$output = get_year($one_year, $ye);
$today[$h][] = $post;
}
for ($i = 0; $i <= 24; $i++) {
$output .= '<tr><td>';
if (10 > $i) {
$output .= "0$i:00";
} else {
$output .= "$i:00";
}
$output .= '</td><td>';
if (isset($today[$i])) {
if (1 == count($today[$i])) {
$output .= "<a href=\"" . get_permalink($post->ID) . "\"
title=\"$post->post_title\">$post->post_title</a>";
} else {
foreach ($today[$i] as $post) {
$output .= "<a href=\"" . get_permalink($post->ID) . "\"
title=\"$post->post_title\">$post->post_title</a><br />";
}
}
} else {
$output .= ' ';
}
$output .= '</td></tr>';
}
$output .= '</table>';
return $output;
} // end get_day()
////////////////////////////////////
if (is_year()) {
$one_year = query_posts("posts_per_page=-1&year=$ye");
$output = get_year($one_year, $ye);
} elseif (is_month()) {
$one_month = query_posts("posts_per_page=-1&year=$ye&monthnum=$mo");
$output = get_month($one_month, $ye, $mo);
} elseif (is_day()) {
$one_day = query_posts("posts_per_page=-1&year=$ye&monthnum=$mo&day=$da");
$output = get_day($one_day, $ye, $mo, $da);
}
// Okay, let's show some stuff
get_header();
get_sidebar();
echo '<div id="content" class="narrowcolumn">';
echo $output;
echo '</div>';
get_footer();
?>