仅在新帖子上更改永久链接

时间:2015-06-12 作者:Philip

是否可以更改特定日期后创建的所有帖子的永久链接?这是因为我们不希望旧的URL被破坏。

现在我们有了/%year%/%month%/%postname%我们想要/%postname

4 个回复
最合适的回答,由SO网友:Mathew Tinsley 整理而成

您的permalink结构是全球性的;它不是单个职位的财产。没有办法表明一篇文章使用了特定的permalink结构,而另一篇文章使用了不同的permalink结构。

当您考虑WordPress如何处理请求时,这很有意义。使用新结构,WordPress将请求映射到index.php?name=$1 哪里$1 是请求的后段塞部分。WordPress然后在数据库中查询带有与请求匹配的slug的帖子。

如果每个帖子都有自己的permalink结构,WordPress必须迭代每个帖子,直到找到一个与请求匹配的permalink结构。

您可以做的是将旧的永久链接重定向到新的永久链接。有几种方法可以做到这一点:

<小时>

.htaccess

您可以将以下内容添加到.htaccess 文件,在WordPress重写规则之前:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^[0-9]{4}/[0-9]{2}/(.*)$ /$1 [R=301,L]
</IfModule>
这将与year/month/postname 结构并重定向到postname 结构

add_rewrite_rule

您可以使用add_rewrite_rule 创建与旧permalink结构匹配的其他规则。

add_action(\'init\', function() {
    flush_rewrite_rules();
    add_rewrite_rule(\'^([0-9]{4})/([0-9]{2})/(.*)$\', \'index.php?name=$matches[3]\', \'bottom\');
});
这与.htaccess 方法如果使用这种方法,请确保通过访问Settings > Permalinks 页面位于后端。

无论使用哪种方法,帖子的规范URL都将使用新的永久链接结构。使用旧permalink结构的请求将重定向到新结构。

搜索引擎最终会抓住变化,索引新结构,而不是旧结构。此时,只要没有使用旧结构的任何内部链接,就可以删除其他重写规则。

如果您确实有使用旧结构的内部链接,我会使用this utility 执行正则表达式搜索和替换。只需确保备份数据库即可。

如果您担心使用旧结构的入站链接,那么除了无限期地保留重写规则之外,您没有什么可做的。

SO网友:Julien B.

根据表示的页面数量(旧页面),您可以考虑为每个页面创建一个具有永久重定向标志的重写规则。

如果这不是一个选择,我认为mtinsley的答案是你最好的选择。

SO网友:zaantar

您可能会发现Redirection 插件很有趣。

它应该允许您在保持旧URL有效的同时更改永久链接结构。

SO网友:Bruno Monteiro

您可以在名称“post”下创建一个新的post类型,然后添加一个重写段塞。这将覆盖默认的Wordpres帖子类型。

以下是示例代码:

add_action( \'init\', \'my_new_default_post_type\', 1 );
function my_new_default_post_type() {

    register_post_type( \'post\', array(
        \'labels\' => array(
            \'name_admin_bar\' => _x( \'Post\', \'add new on admin bar\' ),
        ),
        \'public\'  => true,
        \'_builtin\' => false, 
        \'_edit_link\' => \'post.php?post=%d\', 
        \'capability_type\' => \'post\',
        \'map_meta_cap\' => true,
        \'hierarchical\' => false,
        \'rewrite\' => array( \'slug\' => \'post\' ),
        \'query_var\' => false,
        \'supports\' => array( \'title\', \'editor\', \'author\', \'thumbnail\', \'excerpt\', \'trackbacks\', \'custom-fields\', \'comments\', \'revisions\', \'post-formats\' ),
    ) );
}
这没有经过测试,但您可以尝试一下。这比更改htaccess上的URL设置要好,因为它将应用于所有帖子和页面。

结束

相关推荐

Dynamic Custom Permalinks

我有一个场景,其目的是创建可以动态更改的自定义永久链接,例如:如果显示国家信息,则URL应为http://example.com/country-information如果显示特定国家的城市信息,则URL应如下所示http://example.com/country/city-information. 我怎样才能做到这一点?