I have a fancy function that i made just for that:
<?php
/* Create taxomony term list of posts based on given year
*
* @param $year - (int) 4 digits - the year to return the list of. required
*
* @param $taxonomy - (string) the taxonomy name of which the retreve the terms. required
*
* @param $echo_out - (boolean) true - to echo false to return default false.
*
* @param $type - (array) of args that tels the function what to get.
*
* examples:
select dropdownlist:
'type' => 'select', //(string)
'name' => 'cat', //(string) name of the select dropdown.
'js' => ture // (boolean) wheter or not to pring out onchange javascript redirect function.
list:
'type' => 'list', //(string)
'before_list' => '<ul>', //(string) html tag (<ul>,<div> you can add classes here).
'after_list' => '</ul>', //(string) html tag (</ul>,</div>)
'before_link' => '<li>', //(string) html tag (<li>,<div>,<span> you can add classes here).
'after_link' => '</li>' //(string) html tag (</li>,</div>,</span>,<br/>).
return array:
'type' => 'return-list', //(string)
'return' => 'ID' // (string) what to return (accepts ID or name).
*/
function yearly_taxonomy_list($year,$type, $taxonomy,$echo_out = false){
$args = array(
'year' => $year,
'posts_per_page' => -1
);
$the_query = new WP_Query( $args );
$cats = array();
while ($the_query->have_posts()){
$the_query->the_post();
$curent_cats = wp_get_object_terms( $post->ID, $taxonomy);
foreach ($curent_cats as $c){
if (!in_array($c,$cats)){
$cats[] = $c;
}
}
}
//dropdown
if (isset($type['type']) && $type['type'] =='select'){
$out="<select name="".$type['name'].'" id="'.$type['name'].'" >';
foreach ($cats as $cd){
$out .= '<option value=".get_term_link( $cd->term_id, $taxonomy )."">'.$cd->name.'</option>';
}
$out .= '</select>';
if($type['js']){
$js="<script type="text/javascript">
var dropdown = document.getElementById("".$name.'");
function onCatChange() {
if ( dropdown.options[dropdown.selectedIndex].value > 0 ) {
location.href = dropdown.options[dropdown.selectedIndex].value;
}
}
dropdown.onchange = onCatChange;
</script>';
$out .= $js;
}
}elseif (isset($type['type']) && $type['type'] =='list'){
$out = $type['before_list'];
foreach ($cats as $cd){
$out .= $type['before_link'].'<a href="'.get_term_link( $cd->term_id, $taxonomy ).'">'.$cd->name.'</a>'.$type['after_link'];
}
$out .= $type['after_list'];
}
//return array
elseif (isset($type['type']) && $type['type'] =='return-list'){
//array of IDS
if ($type['return'] =='ID'){
foreach ($cats as $cd){
$out[] = $cd->term_id;
}
}
//array of names
if ($type['return'] =='name'){
foreach ($cats as $cd){
$out[] = $cd->name;
}
}
return $out;
}
else{
$out="something went worng";
}
if($echo_out){
echo $out;
}else{
return $out;
}
}
?>
Usage:
<?php
// category dropdown with JavaScript OnChange redirect
$type=array('type' => 'select', 'name' => 'cat','js' => ture );
yearly_taxonomy_list(2010,$type, 'category' ,true);
//unordered list of categories
$type=array(
'type' => 'list',
'before_list' => '<ul class="yearly-cats">',
'after_list' => '</ul>',
'before_link' => '<li>',
'after_link' => '</li>');
yearly_taxonomy_list(2010,$type, 'category' ,true);
//return array ids of categories
$type=array('type' => 'return-list', 'return' => 'ID');
$cat_ids = yearly_taxonomy_list(2010,$type, 'category' ,true);
?>