如何在functions.php中创建301重定向规则

如何在functions.php中创建301重定向规则,php,wordpress,url,redirect,Php,Wordpress,Url,Redirect,首先,对不起,如果我的英语不是很好 出于各种原因(VM状态不一致,主要是格式过时),我正在将一个网站迁移到Wordpress 网络上有一个新闻频道不再工作了,但这些频道仍然在旧数据库中。我用Python编写了一个小脚本,用wordpress使用的导入格式,从CSV和数据库中获取的新闻生成XML 该新闻有一个相关ID,我从中生成了帖子ID和url,格式为“mywebsite.com/on-1234”(“on”来自“Old news”)。在旧网站上,新闻的格式为“mywebsite.com/news

首先,对不起,如果我的英语不是很好

出于各种原因(VM状态不一致,主要是格式过时),我正在将一个网站迁移到Wordpress

网络上有一个新闻频道不再工作了,但这些频道仍然在旧数据库中。我用Python编写了一个小脚本,用wordpress使用的导入格式,从CSV和数据库中获取的新闻生成XML

该新闻有一个相关ID,我从中生成了帖子ID和url,格式为“mywebsite.com/on-1234”(“on”来自“Old news”)。在旧网站上,新闻的格式为“mywebsite.com/news.html?id=1234”。这些旧链接和当前链接来自大量站点(我们是环境研究中心)

我知道如何从一个链接重定向到另一个链接,但在每一条新闻中单独重定向可能是一项乏味的任务,因为有数百条。。。是否有某种方法可以检测模式“/news.html?id=1234”并将其替换为“on-1234”(保留号码),使其重定向到该路由

我已经搜索了关于它的信息,没有解决方案满足我的需要


提前感谢

在Web服务器之外执行类似操作的最有效方法是挂接WordPress'
parse_request
hook并在那里处理重定向。下面是一些挂接到
parse_request
的示例代码,检查请求是否指向旧的
news.html
,如果请求是并且具有id,它将指向id为
mywebsite.com/?p=1234
的帖子,如果该id与帖子id不匹配,您可以稍微调整一下,以获得相同的效果

/**
*插件名称:旧新闻重定向
*插件URI:
*描述:重定向旧新闻URL。
*版本:0.0.1
*作者:忍者
*作者URI:
*许可证:GPL2
*/
名称空间堆栈溢出\OldNews;
函数重新定向($wp){
如果('news.html'=$wp->request){
$id=过滤器输入(输入获取'id',过滤器验证\u INT);
if(空($id)){
返回;
}
wp_safe_重定向(添加查询参数('p',$id,home_url());
出口
}
}
添加_操作('parse_request',u名称空间_u.'.\maybe_redirect');

我测试了这段代码,把它放到我的一个测试站点的
mu plugins
目录中,如果你不想让任何用户在有人更改主题时关闭或中断它,我建议你采用这种方法。

在Web服务器外部执行类似操作的最有效方法是挂接到WordPress的
解析请求
挂接并处理那里的重定向。下面是一些挂接到
parse_request
的示例代码,检查请求是否指向旧的
news.html
,如果请求是并且具有id,它将指向id为
mywebsite.com/?p=1234
的帖子,如果该id与帖子id不匹配,您可以稍微调整一下,以获得相同的效果

/**
*插件名称:旧新闻重定向
*插件URI:
*描述:重定向旧新闻URL。
*版本:0.0.1
*作者:忍者
*作者URI:
*许可证:GPL2
*/
名称空间堆栈溢出\OldNews;
函数重新定向($wp){
如果('news.html'=$wp->request){
$id=过滤器输入(输入获取'id',过滤器验证\u INT);
if(空($id)){
返回;
}
wp_safe_重定向(添加查询参数('p',$id,home_url());
出口
}
}
添加_操作('parse_request',u名称空间_u.'.\maybe_redirect');

我测试了这段代码,把它放在我的一个测试站点的
mu plugins
目录中,如果你不想让任何用户关闭它,或者在有人改变主题时它会被破坏,我会建议这样做。

你现在怎么做重定向?我可以用“get_the_permalink”来做或者使用重定向插件,但在这两种情况下,我只能单独执行。无论如何,@ninnytans解决方案已经非常有效了。ThanksHow你现在正在做重定向吗?我可以用“get_the_permalink”或重定向插件来做,但在这两种情况下,我只能单独做。无论如何,@ninnytans解决方案已经非常有效了。ThanksIt工作得很好!非常感谢你!我做了一些修改,因为我在导入中向post ID值添加了“100”,以避免与现有的post冲突,所以我将$ID值更改为“$ID='100”。$ID;”,效果非常好。谢谢它工作得很好!非常感谢你!我做了一些修改,因为我在导入中向post ID值添加了“100”,以避免与现有的post冲突,所以我将$ID值更改为“$ID='100”。$ID;”,效果非常好。谢谢