Hi I had the same situation on my blog.
I modified code from a pastie on one of the posts regarding category calendar posts, made it work, and combined it with an archive template to achieve the desired effects.
First, add this code to your functions.php file:
http://pastie.org/491698
Then, create or edit your date/archive.php file to exclude posts not within your category. For me, the category name is 'blog', which has the ID 7 (you can see me use ID 7 above when I call the custom calendar function).
<?
if (have_posts()) {
while (have_posts()) {
the_post();
if (in_category('blog')) {
$link = get_permalink();
$title = the_title(NULL,NULL,FALSE);
$content = get_the_excerpt();
$post_id = $post->ID;
$results[] = Array('id' => $post_id, 'title' => $title, 'link' => $link, 'content' => $content);
}
}
}
if ($results) {
foreach ( $results as $result ) {
?>
<div class="feature">
<h2><a href="<?=$result['link'];?>" title="<?=$result['title'];?>"><?=$result['title'];?></a></h2>
<?=$result['content'];?>
<div class="clear"></div>
</div> <!-- div#.feature -->
<?
}
} else {
?>
<p>Sorry, no posts found</p>
<?
}
?>
You can see a working example here:
http://biggreencouch.com/demo_site/2009/03/
The top carousel items are pulled from blog posts in the 'frontpage carousel' category, however the archive pages and the calendar only show posts from the 'blog' category.
Example, include multiple categories:
Let's say you're blog section has more than one category (6=blog featured, 7=blog normal). Gather your category IDs and category slugs.
In functions.php:
echo get_calendar_custom('6,7');
This tells the calendar to draw from category IDs 6, and 7.
*** Make sure you pass a string of comma seperated values ***
YES: get_calendar_custom('1,5,12,16');
NO: get_calendar_custom(7,9,12);
Next, edit your archive.php or date.php loop at the part where you say if in_category, add all the category slugs (you can also pass the category IDs or the proper name, I personally like slugs because I can see the name):
if (in_category('blog,blog-featured')) {
Let me know if this helps, it works for me I'm using WP 2.7.1