为自定义循环重写GET_NEXT_POSTS_LINK()

时间:2015-08-12 作者:wp student

我在试着操纵它get_next_posts_link() 用于我的自定义循环。我的作者页面有一个使用查询字符串的自定义循环”?sort=selfie“。我已将查看自拍注册为”query_vars.

http://localhost/author/ricky/selfie/
第一页很好用。但下一页链接返回404错误。当前我的下一页链接显示如下:

http://localhost/author/ricky/selfie/page/2/
但当我点击以下链接时,效果很好:

http://localhostauthor/ricky/selfie/2/?view=selfie
所以我想出了一个业余的方法,它本身就是一个错误。我修改了next\\u page\\u link(),如下所示的代码。

$pager=explode(\'"\',get_next_posts_link()); 
$pager_url=$pager[1];

$newurl = str_replace(\'selfie/\',\'\',$pager_url); ?>
<a href="<?php echo $newurl.\'?view=selfie\'; ?>">Next</a>
但在第二页之后它会复制?sort=selfie 在url的末尾。

http://localhost/author/ricky/page/3/?sort=selfie?sort=selfie
你们知道循环分页的解决方案吗query_vars?

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

我不知道你所说的“自定义循环”是什么意思(也许你使用的是自定义循环WP_Query 对象?)但在正常情况下(代码尚未测试),我会这样做:

Note: 我的初始解决方案使用add_rewrite_endpoint 该函数在分页工作方面被证明是无用的

function wt_rewrite_rule() {
    add_rewrite_tag(\'%selfie%\', \'([^&]+)\');

    add_rewrite_rule( \'author/([^/]+)/selfie/page/([0-9]+)/?$\', \'index.php?author_name=$matches[1]&selfie=1&paged=$matches[2]\', \'top\' );
    add_rewrite_rule( \'author/([^/]+)/selfie/?$\', \'index.php?author_name=$matches[1]&selfie=1\', \'top\' );
}
add_action( \'init\', \'wt_rewrite_rule\' );
至于从循环中链接到作者页面,您只需构建如下URL:

$author_url = esc_url( get_author_posts_url( get_the_author_meta( \'ID\' ) ) ) . \'selfie/\';
您可以像这样检查var的存在:

global $wp_query;

if ( isset( $wp_query->query_vars[\'selfie\'] ) ) {
    // Your custom code here
}
与使用不同add_rewrite_endpoint, 分页也应该有效。

我想说清楚,据我所知,你提到过这样一个页面链接:

http://localhost/author/ricky/selfie/page/2/
这行不通。上述解决方案旨在解决此问题并使其按预期工作。

结束

相关推荐

Pagination - not progressing

好的,我添加了以下分页标记:<?php next_posts_link( \'Older posts\' ); ?> <?php previous_posts_link( \'Newer posts\' ); ?> 我可以在地址栏中看到查询字符串正在正确更改e、 g.localhost:8888/wordpress/?页码=3但是,页面结果保持不变(显示最初的前10个结果)。我这里出了什么问题?编辑:下面是代码(没有任何HTML):<!--Latest Po