需要WordPress存档以某种格式显示

时间:2014-11-18 08:25:04

标签: php wordpress archive codex

我的WordPress博客目前以月份格式显示档案。像这样:

2014年11月
2014年10月
2014年9月
2014年8月
2014年7月
2014年6月
2014年5月
.....
等等

我需要以这样的方式显示当前年份显示所有月份,但在此之前的所有年份,它只显示“年份”。像这样:

2014年11月
2014年10月
2014年9月
...
...
2014年2月
2014年1月
2013
2012
2011
2010

有人可以指导我吗?我博客侧边栏中的当前代码如下:

<?php /* If this is a category archive */ if ( is_category(0) || in_category(0)) { ?>
<?php ?><ul>
<?php
$querystr = "SELECT YEAR(post_date) AS 'year', MONTH(post_date) AS 'month' , count(ID) as posts FROM $wpdb->posts INNER JOIN $wpdb->term_relationships ON($wpdb->posts.ID = $wpdb->term_relationships.object_id) INNER JOIN $wpdb->term_taxonomy ON($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id) WHERE $wpdb->term_taxonomy.term_id != 12 AND $wpdb->term_taxonomy.parent != 12 AND $wpdb->term_taxonomy.taxonomy = 'category' AND $wpdb->term_taxonomy.term_id =8 AND $wpdb->posts.post_status = 'publish' AND $wpdb->posts.post_type = 'post' GROUP BY YEAR(post_date), MONTH(post_date) ORDER BY post_date DESC";

$years = $wpdb->get_results($querystr);

foreach ( (array) $years as $year ) {
    $url = get_month_link($year->year, $year->month );
    $url = $url.'?cat=8';
    $date = mysql2date('F o', $year->year.'-'.$year->month, $translate = true);
    echo get_archives_link($url, $date, 'html','<li>','</li>');
}
?>
</ul><?php 

?>

<?php } else { ?>
            <?php wp_get_archives('type=monthly');?>

<?php } ?>



                </ul>






                         </div>
                           <div class="archive-bottom"></div>
                <!--    <div class="clear"></div>-->
 <?php } ?>                   




</div>

1 个答案:

答案 0 :(得分:0)

您目前正在使用wp_get_archives('type=monthly')以外的任何内容,这显然会导致问题。你应该看一下wp_get_archives() docs in the Codex

以下是一个示例解决方案,但可能需要一些工作(假设您今年每个月发布一次,如您的帖子所示)。它尚未经过测试,因此使用风险自负。

// Get the current month number
$current_month = date('n');

// Show the archives for the current year, by month, 
// by limiting the returned archives to the current month number
$args = array(
    'limit' => $current_month
);
wp_get_archives( $args );


// Awesome, now let's get the previous years, but leave off this year
$yearly_archives = wp_get_archives('type=yearly&echo=0'); 
// Split the returned archives at this year...
$old_archives = explode('</li>', $yearly_archives, 2);
// And only echo list items that don't include this year.
echo $old_archives[1];