为什么WordPress中的重写规则会阻止分页?

时间:2013-08-01 作者:dcp3450

我有一个使用重写规则的自定义页面。“非分页”重写工作正常:

add_rewrite_rule(
     \'^brand-list/([^/]*)/([^/]*)/?\',
     \'index.php?pagename=brand-list&brand=$matches[1]&section=$matches[2]\',
     \'top\'
);
基本上是这样的url/pagename=brand-list&brand=MyBrand&section=MySection 结果是这样的,/brand-list/MyBrand/Mysection

但是,使用分页时,页码永远不会返回到wordpress so$paged 第2页上仍然是0

add_rewrite_rule(
      \'^brand-list/([^/]*)/([^/]*)/page/([0-9]+)?\',
      \'index.php?pagename=brand-list&brand=$matches[1]&section=$matches[2]&paged=$matches[3]\',
      \'top\'
);
此url,/pagename=brand-list&brand=MyBrand&section=MySection&paged=2, 结果是这样的,/brand-list/MyBrand/Mysection/page/2 但仍显示第1页。检查$paged 值输出为0,应为2。

如果我删除了重写规则/pagename=brand-list&brand=MyBrand&section=MySection&paged=2 通过第2页显示和$paged 值为2。

有了重写规则,如果您有超过页码,则会得到以下结果:

/brand-list/MyBrand/Mysection/?paged=2
很明显,重写规则是个问题,但我不确定我遗漏了什么部分。

如果我使用此url:

/pagename=brand-list&brand=MyBrand&section=MySection&paged=2
通过重写,其结果如下:

/page/2/pagename=brand-list&brand=MyBrand&section=MySection
而且很有效!但我的url结构不正确。

-----编辑------

我的当前功能

function rewrite_rule_brands() {
        global $wp_rewrite;
        add_rewrite_tag(\'%brand%\',\'([^/]*)\');
        add_rewrite_tag(\'%section%\',\'([^/]*)\');
        add_rewrite_rule(\'^brand-list/([^/]*)/([^/]*)/page/([0-9]+)?\',\'index.php?pagename=brand-list&brand=$matches[1]&section=$matches[2]&paged=$matches[3]\',\'top\');
        add_rewrite_rule(\'^brand-list/([^/]*)/([^/]*)/?\',\'index.php?pagename=brand-list&brand=$matches[1]&section=$matches[2]\',\'top\');
        $wp_rewrite->flush_rules();
    }
    add_action( \'init\', \'rewrite_rule_brands\' ); 

2 个回复
SO网友:dcp3450

我更改了:

add_rewrite_rule(\'^brand-list/([^/]*)/([^/]*)/page/([0-9]+)?\',\'index.php?pagename=brand-list&brand=$matches[1]&section=$matches[2]&paged=$matches[3]\',\'top\');
收件人:

add_rewrite_rule(\'^brand-list/([^/]*)/([^/]*)/page/?([0-9]{1,})/?$\',\'index.php?pagename=brand-list&brand=$matches[1]&section=$matches[2]&paged=$matches[3]\',\'top\');
请注意,区别在于/page/([0-9]+)? 现在是/page/?([0-9]{1,})/?$

现在似乎在工作。

SO网友:Mark

这个答案帮助我解决了一个自定义重写问题。我想补充一点,我的案例有点不同,因为我将类别树嵌套在url结构中
example.com/brand-list/brand-child-category/brand-grand-child-category/page/1 这就像brand-list/nike/air-jordans/high-tops/postname

为了让我的工作顺利进行,我先调用了类别,然后调用了页面,最后调用了页码限定符。

$newRules[\'brand-list/(.+)/page/?([0-9]{1,})/?$\'] =
    \'index.php?brand=$matches[1]&paged=$matches[2]\';
注意:我的重写编码不同,但基本结构可以帮助其他人。

结束

相关推荐

Pagination for two loops

我知道之前已经讨论过这个问题,但我似乎无法将它与其他主题中发布的任何解决方案配合使用。如何对这样的循环进行分页: <div id=\"first-loop-container\"> <?php $my_query = new WP_Query(\'showposts=5\'); ?> <?php while ($my_query->have_posts()) : $my_query->the_post(