假设我有一个带有分页的归档页面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,here 和here, 但我不知道这是否是我想要的。理想情况下,如果URL具有post
咬进去。
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\');