自定义POST类型循环中的漂亮分页固定链接

时间:2011-02-16 作者:onetrickpony

我一定是在用这些永久性的问题来烦你:)

我用于循环的代码是:

// hijack stupid WP globals to get pagination working...
global $wp_query;
$temp = $wp_query;

$paged = get_query_var(\'paged\') ? get_query_var(\'paged\') : 1;
$wp_query = new WP_Query();
$wp_query->query(array(
  \'post_parent\' => get_the_ID(),
  \'post_type\' => \'topic-reply\',
  \'posts_per_page\' => 10,
  \'order\' => \'ASC\',
  \'paged\' => $paged,
));
if($wp_query):
  wp_pagenavi();
  while ($wp_query->have_posts()):
    $wp_query->the_post();
    get_template_part(\'topic-reply\');
  endwhile;
  wp_pagenavi();
endif;

$wp_query = $temp;
wp_reset_query();
如果将永久链接设置为默认值,则分页工作正常,单击第2页链接时,我得到的URL如下所示:

http://localhost/wp/?topic=sometopictitle&paged=2

当我将永久链接设置为自定义结构时,问题就出现了;单击第2页时,我得到第一页URL:

http://localhost/wp3/forum/general-discussion/topic/sometopictitle/

而不是

http://localhost/wp3/forum/general-discussion/topic/sometopictitle/page/2/

(活生生的例子here)

有人知道我应该添加哪些规则来设置“主题回复”帖子类型的页面永久链接吗?

1 个回复
最合适的回答,由SO网友:John P Bloch 整理而成

当您使用paged 在单个帖子上,它检查的是分页的帖子,而不是一页一页的帖子。因为你的主题没有分页内容,所以它假设这是一个错误,并重定向到主题的“第一”页,远远早于你的自定义循环。因此,在这种情况下,paged 总是以1的形式返回。作为一种解决方法,我会为这个主题注册一个EP Permalink。类似这样:

add_rewrite_endpoint( \'tpage\', EP_PERMALINK );
然后,而不是检查get_query_var( \'paged\' );, 检查get_query_var( \'tpage\' ); 并将其值传递给自定义查询。设置重写端点意味着所有永久链接都与EP_PERMALINK 位掩码(您的主题兼容)将接受/tpage/XXXX 结构添加到url的末尾,其中XXXXX可以是您想要的任何内容(在本例中,您希望将其转换为整数,可能是绝对值)。

编辑这样的内容应该可以为您提供分页链接数组:

$links = paginate_links(array(
  \'base\' => trailingslashit( get_permalink( $temp->post->ID ) ) . \'%_%\',
  \'format\' => \'tpage/%#%\',
  \'type\' => \'array\'
));
从那里,你可以做这样的事情:

<div class="page-navi  clear-block">
  <?php foreach( $links as $link ){
    if( false !== strpos( $link, " class=\'page-numbers\'" ) )
      $link = str_replace( " class=\'page-numbers\'", " class=\'page page-numbers\'", $link );
    echo $link;
  } ?>
</div>
我敢肯定,这会为链接提供相同的样式和“当前”样式。

结束

相关推荐

Pagination with custom loop

我的问题可能是Pagination not working with custom loop, 但有一种不同。我使用自定义循环来显示flash游戏。我想按类别在游戏页面上分页。类别php:<?php if ($cat) { $cols = 2; $rows = 4; $paged = ((\'paged\')) ? get_query_var(\'paged\') : 1; $post_per_page = $cols * $rows; // -1 s