如何从带有帖子ID的url重定向到带有帖子名称(Slug)的永久链接?

时间:2019-05-22 作者:whyer

我的帖子有两种不同类型的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?

1 个回复
最合适的回答,由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);
}

相关推荐

从函数.php内修改_POSTS_PAGINATION,而不是模板文件

我知道使用如下函数(在functions.php) 允许我自定义分页选项:function custom_theme_pagination(){ global $wp_query; echo paginate_links(); } 。。。前提是主题文件包含<?php custom_theme_pagination(); ?> 无论我希望分页显示在哪里。然而,我想要实现的是控制<?php the_posts_pagination(); ?