如何使用自定义固定链接处理分页/分页?

时间:2012-08-17 作者:Manny Fleurmond

我希望我能正确解释这一点:

我正在从事一个涉及多种帖子类型和自定义永久链接的项目。我有一个电视/电影系列/特许经营的帖子类型,还有一个单独的内容帖子类型(剧集、电影、直接到视频)。对于内容类型,我目前有一个永久链接,如下所示:

abc.com/watch/%content_series%/%content_type%/%postname%
多亏了重写规则,结构退化了:我可以使用abc.com/watch/%content_series%/%content_type%/abc.com/watch/%content_series%/ 没问题。我遇到的问题是分页。如果我做了abc.com/watch/one-piece/page/2, 我遇到了一个障碍,因为它没有意识到我想要第2页,而是认为第2页是content_type 2是name.

重写分析器的屏幕盖证实了这一点:enter image description here

所以,正确的重写是存在的,只是没有优先权。有没有办法让它正常工作?

编辑:以下是设置所有内容的代码:

//Query vars/tags   
    add_rewrite_tag(\'%content_series%\',\'([^/]+)\');
    add_rewrite_tag(\'%content_type%\',\'([^/]+)\');
    add_rewrite_tag(\'%content_num%\',\'([0-9]{1,})\');

    //Permastructs
    $content_struct = get_option(\'veda_content_slug\') . \'/%content_series%/%content_type%/%postname%\';
    add_permastruct(\'veda_content\', $content_struct, false);    
    add_rewrite_rule(  get_option(\'veda_content_slug\') .\'/?$\', \'index.php?post_type=veda_content\', \'top\' ); 

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

我以前也有过同样的沮丧。以下内容有助于恢复失去的理智。

您的第一次重写非常松散,没有看到第二次重写,因为“page”与您的第二段([^/]+)匹配。解决此问题的方法是颠倒代码中的注册顺序。如果分页重写低于较宽松的规则,请将其放在上面一行,反之亦然,无论您在哪里注册重写规则。

您将看到规则在分析器中正确显示。

希望这有帮助!

SO网友:Manny Fleurmond

好的,经过多次试验,我找到了一个解决方案。我所要做的就是创建一些更自定义的重写规则以使其正常工作:

//Custom rewrites
    add_rewrite_rule(
        $slug . \'/page/([0-9]+)?/?$\',
        \'index.php?post_type=veda_content&paged=$matches[1]\',
        \'top\'
    );
    add_rewrite_rule(
        $slug . \'/([^/]+)/page/([0-9]+)?/?$\',
        \'index.php?post_type=veda_content&paged=$matches[2]&content_series=$matches[1]\',
        \'top\'
    );
    add_rewrite_rule(
        $slug . \'/([^/]+)/([^/]+)/page/([0-9]+)?/?$\',
        \'index.php?post_type=veda_content&paged=$matches[3]&content_series=$matches[1]&content_type=$matches[2]\',
        \'top\'
    );
这些在重写分析器中起作用。希望这对其他人有帮助。

结束

相关推荐

Pagination not working

$paged for pagination是awlays返回1,因此无论我单击哪个页面,“1”总是突出显示,并且总是显示相同的帖子。我尝试了一百万种不同的东西组合来修复,但没有任何效果:(<ul> <?php wp_reset_query(); $paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1;&#