我的帖子有两种不同类型的URL:一种带有帖子id,另一种带有帖子slug:
/post/789
/post/my-post-slug
我正在使用:
add_rewrite_rule(
\'post/(\\d+)/?\',
\'index.php?p=$matches[1]\',
\'top\'
);
并使用%post\\u name%设置永久链接。
二者都/post/123
和/post/my-post-slug
打开相同的html页面。
是否可以让wordpress将301重定向返回到/post/my-post-slug
访问时/post/123
?
最合适的回答,由SO网友:whyer 整理而成
是的,这是可能的。添加一个template_redirect
吊钩装卸工:
add_filter(\'template_redirect\', \'redirect_post_to_canonical_url\');
function redirect_post_to_canonical_url(): void
{
if (!is_single()) {
// do not redirect nothing else except posts
return;
}
$canonicalLocation = get_permalink();
$requestUri = $_SERVER[\'REQUEST_URI\'];
$currentLocation = home_url(\'/\') . substr($requestUri, 1);
if ($currentLocation === $canonicalLocation) {
// prevent from infinite redirect loop
return;
}
wp_redirect($canonicalLocation, 301);
}