Перед выводом ссылки вы можете проверять существуют ли посты, относящиеся к текущему году, но это породит много довольно лишних запросов в базу. Если такой задачи нет, то можно реализовать через простой счетчик
$year = 2008;
$current_year = date( 'Y' );
echo '<ul>';
while ( $year <= $current_year ) {
echo '<li><a href="' . get_year_link( $year ) . '">' . $year . '</a></li>';
$year++;
}
echo '</ul>';
Если все-таки нужно проверять существование постов, то можете запрашивать один, из каждого года таким образом:
$year = 2008;
$current_year = date( 'Y' );
echo '<ul>';
while ( $year <= $current_year ) {
$args = array(
'year' => $year,
'post_status' => 'publish, future, draft, pending',
'posts_per_page' => 1,
'fields' => 'ids'
);
$posts = get_posts( $args );
if ( is_array( $posts ) && !empty( $posts ) ) {
echo '<li><a href="' . get_year_link( $year ) . '">' . $year . '</a></li>';
}
$year++;
}
echo '</ul>';
Если вы заранее не знаете в котором году был опубликован первый пост, его можно получить с помощью сортировки
ASC
$args = array(
'posts_per_page' => 1,
'order' => 'ASC'
);
$posts = get_posts( $args );
if ( $posts ) {
$year = date( 'Y', strtotime( $posts[0]->post_date ) );
}
PS. Если у вас не посты, а другой тип записи, нужно указывать аргумент
post_type