在自定义页面模板上使用WP分页功能

时间:2018-02-01 作者:SamXronn

我有一个自定义页面模板,我使用标准的WPQuery从默认的posts自定义post类型中获取帖子。我正在浏览所有帖子,但是现在我的帖子比管理员设置中允许的要多。我想使用一些标准的WP分页,而不是更改限制。但是,这些函数都不能在自定义页面模板上使用,但在index.php.

<?php /* Template Name: News page */
get_header(); ?>
<?php $args = array(
    \'post_type\'  => array( \'post\' ),
  );

  // The Query
  $query = new WP_Query( $args ); ?>

<div id="primary" class="content-area">
  <main id="main" class="site-main full-width pd" role="main">
    <div class="news-loop">
        <div class="row">
          <?php if($query->have_posts()) :
            while($query->have_posts()) :
              $query->the_post();?>
              <div class="col col-md-4">
                <a href="<?php the_permalink(); ?>">
                    <div class="cut-box">
                        <?php the_post_thumbnail( \'gallery\' ); ?>
                    </div>
                </a>
                <span class="date">
                    <?php echo get_the_date(\'d/m/Y\'); ?>
                </span>
                <h3><?php the_title(); ?></h3>
                <?php the_excerpt(); ?>
                <a href="<?php the_permalink(); ?>">Read More...</a>
              </div>
            <?php endwhile; ?>
            <p class="nav"><?php previous_posts_link(); ?></p>
          <?php endif; ?>
          <?php wp_reset_query(); ?>
        </div>
      </div>
  </main>
</div>
<?php get_footer(); ?>
我用过previous_posts_link() 函数作为测试,但dom中不返回任何内容。

是否可以在自定义页面模板上使用标准wp分页?

2 个回复
最合适的回答,由SO网友:Mark Kaplun 整理而成

你不能。

wordpress分页API设计用于处理主查询,而不是像您的情况那样处理辅助查询。

这里有很多类似问题的答案,有各种各样的技巧可以解决,虽然应用了足够的技巧,可能会使它适用于您的特定情况,但基本答案应该是,如果您需要在二次循环上分页,您必须自己编写。

您应该做的是为您希望页面所在的URL创建一个主查询。设置自己的重写规则,将特定url解析为循环所需的任何wp\\U查询参数,并使用template_redirect 钩子以使用该URL的特定模板。

您仍然可以使用页面作为标题的“配置屏幕”,以及该模板生成正确HTML所需的任何其他属性。

虽然在这个解决方案中,您需要以多种方式正确设置细节,但与尝试破解分页API相比,这是一个更可靠的解决方案。

SO网友:Maxim Sarandi

像这样的东西可能对你有帮助

$args = array(
    \'end_size\'  => 1,
    \'mid_size\'  => 1,
    \'prev_next\' => false,
    \'type\'      => \'list\',
    \'current\'   => max( 1, get_query_var(\'page\') ),
    \'total\'     => $query->max_num_pages,
);
paginate_links($args);
在查询中定义get_query_var(\'page\') 喜欢

\'paged\' => get_query_var(\'page\') ?: 1,

结束