Wordpress - 按分页列出按年份分类的所有帖子

时间:2014-09-20 18:51:51

标签: wordpress pagination

现在我正在使用以下代码按年显示所有帖子:

的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() ? '&rarr;' : '&larr;';
    $next_arrow = is_rtl() ? '&larr;' : '&rarr;';

    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; ?>

0 个答案:

没有答案