在Wordpress上显示自定义帖子类型查询的帖子

时间:2015-11-17 22:54:15

标签: wordpress post pagination wp-query

我在显示特定帖子类型的10多个帖子时遇到了一些问题。我目前的代码是:

<?php get_header();
$ppp = ( !is_paged() ) ? '10' : '15';
$ofs = ( get_query_var('paged') != 0 ) ? ( ( get_query_var('paged') - 1 ) * 15 ) - 5 : 0;
// WP_Query arguments
$args = array (
    'post_type'              => array( 'book' ),
    'pagination'             => true,
    'paged'                  => get_query_var('paged'),
    'posts_per_page'         => $ppp,
    'offset'                 => $ofs,
    'ignore_sticky_posts'    => false,
);

// The Query
$query = new WP_Query( $args ); ?>
    <section class="books <?php if(get_query_var('paged') == 0){ echo 'first-page'; } else { echo 'next-page'; } ?>">
      <?php if ($query->have_posts()) : while ($query->have_posts()) : $query->the_post(); ?>
      <?php $fImg = wp_get_attachment_image_src( get_post_thumbnail_id( get_the_ID() ), 'large' ); $fi = $fImg[0]; ?>
      <a href="<?php the_permalink(); ?>" class="grid-item-story" style="background-image: url('<?php echo $fi; ?>');">
        <article <?php post_class(); ?> id="book-<?php the_ID(); ?>">
          <div class="book-item-wrap">
            <div class="book-item-inner">
              <div class="book-item-content">
                <div class="book-item-content-inner">
                  <p class="published-date"><?php the_time('M j, Y'); ?></p>
                  <?php if ($query->current_post == 0 && !is_paged() ) { ?>
                    <h1><?php the_title(); ?></h1>
                  <?php } else { ?>
                    <h1><?php echo getBookTitle(get_the_title()); ?></h1>
                  <?php } ?>
                  <div><span class="button">Read</span></div>
                </div>
              </div>
            </div>
          </div>
        </article>
      </a>
      <?php endwhile; endif; ?>
      <div class="clear"></div>
      <div class="navigation">
        <div class="next-posts"><?php next_posts_link('&laquo; Older Entries') ?></div>
        <div class="prev-posts"><?php previous_posts_link('Newer Entries &raquo;') ?></div>
      </div>
    </section>
<?php get_footer(); ?>

这是我的front-page.php文件的完整代码。在我的第一页上,将有10个帖子。在每个后续页面上,将有15个。这是因为我的帖子每行显示五行,每行三个帖子,第一页上的帖子是两个&#34;帖子&#34;广泛的三个帖子&#34;高。此帖子类型共有50个帖子。

因此,应该只有四页:

  1. 帖子1 - 10
  2. 帖子11 - 25
  3. 帖子26 - 40
  4. 帖子41 - 50
  5. 但是,下一个/上一个链接出现在第4页,这意味着有一个指向第5页的链接,该链接没有任何内容。 此外,偏移量似乎不起作用,这意味着第4页显示五个帖子而不是十个。(通过将!is_paged()更改为get_query_var('paged') != 0来固定)I&#39 ; ve添加了一个公式来计算偏移量,以确定它是否会修复它,它没有,即使它确实在我在其他地方回显它时给出了正确的位置。我已经尝试了Codex中WP_Query页面上列出的解决方法(更正了found_posts问题),但似乎没有删除第五页。即使我手动将每个页面的帖子数设置为15,仍然有第五页。我已经尝试了WP_Queryget_posts(),但都没有工作。有没有我错过的东西?

1 个答案:

答案 0 :(得分:1)

感谢彼得的评论,我找到了解决办法。根据codex页面,我可以设置要显示的最大页数。这只是手动设置该数字的简单问题。

<?php ?>函数的next_posts_link标记中,就在我调用函数之前,我添加了这两行代码:

// Get the total number of posts found
$pc = $query->found_posts;
// Check if $pc is less than 11.
// If so, delete 10 from $pc (for the posts on the first page), then divide it by 15 (for the posts on other pages).
// Add 1 to account for the first page.
// Otherwise, return 1, because there will only be one page.
$mnp = ( $pc < 11 ) ? 1 : ceil( ( $pc - 10 ) / 15 ) + 1; 

为您的利益添加了评论;它们不包含在我的文件中。虽然我可能应该添加它们。通过添加一个太多的帖子来测试它以便在页面上干净利落地显示它有效。它可能看起来不漂亮,但它有效,所以我不抱怨。