I have an archive that shows all the post on monthly now i want is to group them per year like
2015
Jan
Feb
March
2014
April
May
I'm using this code.
<?php wp_get_archives( array( 'type' => 'monthly' ) ); ?>
This displays all the archive monthly from the beginning. i tried to add a monthly and yearly but they are on a separate group...
I have an archive that shows all the post on monthly now i want is to group them per year like
2015
Jan
Feb
March
2014
April
May
I'm using this code.
<?php wp_get_archives( array( 'type' => 'monthly' ) ); ?>
This displays all the archive monthly from the beginning. i tried to add a monthly and yearly but they are on a separate group...
Share Improve this question asked Jun 16, 2015 at 2:38 MIkeMIke 8311 bronze badges2 Answers
Reset to default 1To display monthly archives arranged by year, you can use this code. It checks through each month if WordPress have any post in that month and create archive.
<?php
global $wpdb;
$limit = 0;
$year_prev = null;
$months = $wpdb->get_results( "SELECT DISTINCT MONTH( post_date ) AS month , YEAR( post_date ) AS year, COUNT( id ) as post_count FROM $wpdb->posts WHERE post_status = 'publish' and post_date <= now( ) and post_type = 'post' GROUP BY month , year ORDER BY post_date DESC" );
foreach( $months as $month ) :
$year_current = $month->year;
if ( $year_current != $year_prev ) {
if ( $year_prev != null ) { ?>
<?php } ?>
<h3><a href="<?php bloginfo('url') ?>/<?php echo $month->year; ?>/"><?php echo $month->year; ?></a></h3>
<?php } ?>
<li><a href="<?php bloginfo('url') ?>/<?php echo $month->year; ?>/<?php echo date("m", mktime(0, 0, 0, $month->month, 1, $month->year)) ?>"><span class="archive-month"><?php echo date_i18n("F", mktime(0, 0, 0, $month->month, 1, $month->year)) ?></span></a></li>
<?php $year_prev = $year_current;
if( ++$limit >= 18 ) { break; }
endforeach;
?>
<?php
global $wpdb;
$limit = 0;
$year_prev = null;
$months = $wpdb->get_results( "SELECT DISTINCT MONTH( post_date ) AS month , YEAR( post_date ) AS year, COUNT( id ) as post_count FROM $wpdb->posts WHERE post_status = 'publish' and post_date <= now( ) and post_type = 'newses' GROUP BY month , year ORDER BY post_date DESC" );
foreach( $months as $month ) :
$year_current = $month->year;
if ( $year_current != $year_prev ) {
if ( $year_prev != null ) { ?>
<?php } ?>
<dt><i class="fa fa-fw fa-plus-square-o" aria-hidden="true"></i><a href="<?php bloginfo('url') ?>/<?php echo $month->year; ?>/"><?php echo $month->year; ?></a></dt>
<?php } ?>
<dd class="post_month"><a href="<?php bloginfo('url') ?>/<?php echo $month->year; ?>/<?php echo date("m", mktime(0, 0, 0, $month->month, 1, $month->year)) ?>"><span class="archive-month"><?php echo date_i18n("F", mktime(0, 0, 0, $month->month, 1, $month->year)) ?></span></a></dd>
<?php $year_prev = $year_current;
if( ++$limit >= 18 ) { break; }
endforeach;
?>