0

我的 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>
4

1 回答 1

0

您目前使用的只是wp_get_archives('type=monthly'),这显然是导致问题的原因。您应该查看Codex 中的 wp_get_archives() 文档

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

// 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];
于 2014-11-18T09:26:48.303 回答