我希望我能正确解释这一点:
我正在从事一个涉及多种帖子类型和自定义永久链接的项目。我有一个电视/电影系列/特许经营的帖子类型,还有一个单独的内容帖子类型(剧集、电影、直接到视频)。对于内容类型,我目前有一个永久链接,如下所示:
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
.
重写分析器的屏幕盖证实了这一点:
所以,正确的重写是存在的,只是没有优先权。有没有办法让它正常工作?
编辑:以下是设置所有内容的代码:
//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\' );
最合适的回答,由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\'
);
这些在重写分析器中起作用。希望这对其他人有帮助。