现在我正在使用以下代码按年显示所有帖子:
的index.php
<?php foreach(posts_by_year() as $year => $posts) : ?>
<h2><?php echo $year; ?></h2>
<ul>
<?php foreach($posts as $post) : setup_postdata($post); ?>
<li>
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
</li>
<?php endforeach; ?>
</ul>
<?php endforeach; ?>
的functions.php
function posts_by_year() {
// array to use for results
$years = array();
// get posts from WP
$posts = get_posts(array(
'numberposts' => -1,
'orderby' => 'post_date',
'order' => 'ASC',
'post_type' => 'post',
'post_status' => 'publish'
));
// loop through posts, populating $years arrays
foreach($posts as $post) {
$years[date('Y', strtotime($post->post_date))][] = $post;
}
// reverse sort by year
krsort($years);
return $years;
}
现在我已经设置了管理面板中的阅读选项,我只想在每页显示3个帖子。使用这个新代码,按年份显示帖子,它显示所有帖子,在分页按钮中有3页。切换到另一个页面时,它会再次显示相同的内容。
如果我每年都有帖子,我怎么能包括分页?我的分页代码是:
<?php if(function_exists('wpex_pagination')) { wpex_pagination(); } ?>
调用该函数:
if ( !function_exists( 'wpex_pagination' ) ) {
function wpex_pagination() {
$prev_arrow = is_rtl() ? '→' : '←';
$next_arrow = is_rtl() ? '←' : '→';
global $wp_query;
$total = $wp_query->max_num_pages;
$big = 999999999; // need an unlikely integer
if( $total > 1 ) {
if( !$current_page = get_query_var('paged') )
$current_page = 1;
if( get_option('permalink_structure') ) {
$format = 'page/%#%/';
} else {
$format = '&paged=%#%';
}
echo paginate_links(array(
'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
'format' => $format,
'current' => max( 1, get_query_var('paged') ),
'total' => $total,
'mid_size' => 3,
'type' => 'list',
'prev_text' => $prev_arrow,
'next_text' => $next_arrow,
) );
}
}
}
我的想法是我可以设置一些要显示的帖子。不是按年份,而是按职位。因此,如果我从2014年开始有30个,从2013年开始有20个并且限制设置为5,那么它将仅显示2014年的前5个。
提前致谢!
编辑:还找到了以下代码,该代码有效,但仅限于第一页。这意味着在第一页中它显示了一次日期,但在接下来的页面中显示了每个帖子的日期。
<?php
$date = 0;
$newDate = true;
if (have_posts()) : while (have_posts()) :
the_post();
if ($date == 0)
$date = the_date('Y');
else if ($date != the_date('Y')) {
$date = the_date('Y');
$newDate = true;
}
if ($newDate)
echo $date . ' ';
$newDate = false; ?>
<?php get_template_part('content'); ?>
<?php endwhile; endif; ?>