WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I've been pulling my hair out on this one - I need to hard code in wp_get_archives() for a specific category into a template.

This post was useful:

Category Specific Archive

but, as with all the plugins I've found so far, they don't work with WP 3.1 (or you need to hack the core files which I obviously don't want to do).

Is there another solution I'm not aware of? Maybe a method by creating a separate loop?

THanks for any pointers


share|improve this question

I did this in a relatively complicated way using a custom query. I did not know about Smart Archives Reloaded so I wrote code myself. But it works. Replace your category ID for "term_taxonomy.term_id"

                     global $wpdb, $wp_locale;
                    $query = "select YEAR(post_date) AS `year`, MONTH(post_date) AS `month`, count(ID) as posts from $wpdb->posts,  $wpdb->term_taxonomy, $wpdb->term_relationships 
                        WHERE $wpdb->posts.post_status = 'publish' 
                        AND $wpdb->posts.post_type = 'post'
                        AND $wpdb->term_taxonomy.term_id = 11
                        AND $wpdb->posts.ID = $wpdb->term_relationships.object_id
                        AND $wpdb->term_taxonomy.term_taxonomy_id = $wpdb->term_relationships.term_taxonomy_id
                     GROUP BY YEAR(post_date), MONTH(post_date) ORDER BY post_date DESC"; 
                     $arcresults = $wpdb->get_results($query); 
                    foreach ($arcresults as $arcresult): 
                    $text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($arcresult->month), $arcresult->year);?>
                    <li><a href="<?php bloginfo('url') ?>/[your_category_base]/[your_category_name]/date/<?php echo $arcresult->year; ?>/<?php echo str_pad($arcresult->month, 2, '0', STR_PAD_LEFT); ?>"><?php echo $text;  ?> </li>
                      <?php endforeach; ?> 

Writing this I was helped by looking at http://core.trac.wordpress.org/browser/tags/3.2.1/wp-includes/general-template.php where wp_get_archives is defined.

And used the code found here (put in functions.php): http://snipplr.com/view.php?codeview&id=17432 to create permalinks for archives for one category in the form of http://example.com/category_base/category_name/date/YYYY/MM

share|improve this answer
I could not figure out how to make the url work the way you have it set up. I am not sure what to put in for category base. I ended up with www.url.com?cat=9&m=<?php echo $year.$month;?> it registers in the address bar as www.url.com/2014/04?cat=9 I would like to use the url that you have listed though. Do you have any hints for me? Thank you! – tlindell Sep 13 '14 at 15:05

Take a look at Scribu's Smart Archives Reloaded plugin which allows you to display a list of posts grouped by year and month.

And to limit the archives by category is as simple as this:

smart_archives( '', 'category_name=category_name' ); 
share|improve this answer

Perhaps use query_posts to generate your query and then use a custom loop.


share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.