2011-08-23 104 views
3

我目前使用wp_get_archives('type=monthly')在我的侧边栏中显示归档链接。这是输出:WordPress:显示按年份归档的归档链接

<ul> 
    <li><a href='http://example.com/2011/08/'>August 2011</a></li> 
    <li><a href='http://recently.se/2011/07/'>July 2011</a></li> 
    <li><a href='http://recently.se/2010/12/'>December 2010</a></li> 
</ul> 

是否可以按月分组呢?这样的事情:

<ul> 
    <h2>2011</h2> 
    <li><a href='http://example.com/2011/08/'>August 2011</a></li> 
    <li><a href='http://recently.se/2011/07/'>July 2011</a></li> 

    <h2>2010</h2> 
    <li><a href='http://recently.se/2010/12/'>December 2010</a></li> 
</ul> 

回答

5

这是我如何实现它,虽然我敢肯定还有更好的方法。我添加了这些功能,我的主题的functions.php文件:

function twentyeleven_get_archives_callback($item, $index, $currYear) { 
    global $wp_locale; 

    if ($item['year'] == $currYear) { 
     $url = get_month_link($item['year'], $item['month']); 
     // translators: 1: month name, 2: 4-digit year 
     $text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($item['month']), $item['year']); 
     echo get_archives_link($url, $text); 
    } 
} 

function twentyeleven_get_archives() { 
    global $wpdb; 

    $query = "SELECT YEAR(post_date) AS `year` FROM $wpdb->posts WHERE `post_type` = 'post' AND `post_status` = 'publish' GROUP BY `year` ORDER BY `year` DESC"; 
    $arcresults = $wpdb->get_results($query); 
    $years = array(); 

    if ($arcresults) { 
     foreach ((array)$arcresults as $arcresult) { 
      array_push($years, $arcresult->year); 
     } 
    } 

    $query = "SELECT YEAR(post_date) as `year`, MONTH(post_date) as `month` FROM $wpdb->posts WHERE `post_type` = 'post' AND `post_status` = 'publish' GROUP BY `year`, `month` ORDER BY `year` DESC, `month` ASC"; 
    $arcresults = $wpdb->get_results($query, ARRAY_A); 
    $months = array(); 

    if ($arcresults) { 
     foreach ($years as $year) { 
        //My Display 
      //echo "\t<li>\n\t\t<a href=\"#\">$year</a>\n\t\t<ul>\n"; 
      //array_walk($arcresults, "twentyeleven_get_archives_callback", $year); 
      //echo "\t\t</ul>\n\t</li>\n"; 

        //Your Display 
      echo "\t<h2>$year</h2>\n\t<ul>\n"; 
      array_walk($arcresults, "twentyeleven_get_archives_callback", $year); 
      echo "\t</ul>\n"; 
     } 
    } 
} 

你会调用该函数,而不是wp_get_archives()在你的主题,像这样:

<ul> 
<?php twentyeleven_get_archives(); ?> 
</ul> 

函数名称可以是任何你想,虽然很好的做法是用你的主题名称(即twentyeleven_)前缀他们

我引用wp_get_archives()get_archives_link()在wp-includes/general-template.php中。