自定义POST类型重写和wp_pagenavi相互干扰

时间:2017-03-27 作者:ptf

假设我有一个带有分页的归档页面wp_pagenavi 用于URL下的分页example.com/articles/news. 使用分页时,URL将更改为example.com/articles/news/page/2, .../page/3, 等等

也可以说我有一个带有slug的自定义post类型newsposttype 我有这样一个重写规则:\'rewrite\' => array(\'slug => \'articles/news\'). 这样做是为了生成URL,其中视图将显示在下面,例如。articles/news/my-amazing-news-story, 而不是newsposttype/my-amazing-news-story.

但是,现在重写会干扰分页。任何URLexample.com/articles/news/page/2, .../page/3, .../page/4, 以此类推,将显示404,直到我从自定义帖子类型中删除重写。

一种解决方案是更改存档URL或重写自定义帖子类型。但是,由于该网站已经投入生产相当长一段时间了,URL由谷歌编制索引。有没有办法告诉重写规则在url以example.com/articles/news/page/, 或者有什么方法可以在不更改URL的情况下解决此问题?

我看到WordPress可以添加后缀来区分URL,herehere, 但我不知道这是否是我想要的。理想情况下,如果URL具有post 咬进去。

1 个回复
SO网友:ptf

我解决了它。要启用新规则,请保存parmalink结构。我试着以上面的新闻为例。

function news_page_rewrite_rule() {
  // Get the URL of the page listing out the news.
  // Here I use the Advanced Custom Fields plugin.
  $news_page_url = get_field(\'_news_page\', \'options\');

  if (empty($news_page_url))
    return;

  // Get the id of the page
  $page_id = url_to_postid($news_page_url);

  // Parse the URL and get the URL parts back
  $news_page_url_parts = wp_parse_url($news_page_url);

  // Add the rewrite rule. I remove the starting /. Doesn\'t work without it.
  add_rewrite_rule(\'^\' . ltrim($news_page_url_parts[\'path\'], \'/\') . \'page/([0-9]+)/?\', \'index.php?paged=$matches[1]&page_id=\' . $page_id, \'top\');
}
add_action(\'init\', \'news_page_rewrite_rule\');

相关推荐