Pagination problem

时间:2013-09-10 作者:say_what

我有两个自定义重写规则:

add_rewrite_rule(\'foo/bar/?\', \'index.php?post_type=foo\', \'top\');
add_rewrite_rule(\'foo/bar/([a-z]+)/?\', \'index.php?post_type=foo&bar=$matches[1]\', \'top\');
这给了我匹配自定义变量的帖子bar. 然而,我也想处理分页,因此当一个数字成功时/bar/ wordpress应将其视为页码。我写道:

add_rewrite_rule(\'foo/bar/([0-9]+)/?\', \'index.php?post_type=foo&paged=$matches[1]\', \'top\');
在附加到的自定义函数中pre_get_posts, 我处理页码:

if($query->get(\'paged\')) {
    $query->set(\'paged\', intval($query->get(\'paged\')));
}
但是,当用户访问时,foo/bar/2, wordpress自动附加/page/2/, (例如,在地址栏中,我得到以下URL:foo/bar/2/page/2/).

虽然分页本身工作得很好(我得到了每个页面所需的记录),但是/page/n/ 弄乱了我在页面上的链接,这是我的url中不必要的重复。我怎样才能摆脱它?

1 个回复
SO网友:Dan Ștefancu

功能redirect_canonical() 对你的问题“负责”。

如果这样做,默认的WordPress分页(具有核心功能)将无法工作,但您可以过滤掉特定自定义url的分页:

add_filter( \'redirect_canonical\', \'wp230913_canonical\', 10, 2 );

function wp230913_canonical( $redirect_url, $requested_url ) {
    if ( preg_match( "#foo/bar/[0-9]+/page/[0-9]+#", $redirect_url ) ) {
        return $requested_url;
    }

    return $redirect_url;
}
我的建议是更改整个网站的分页基础,更改$wp_rewrite->pagination_base

结束