【问题标题】:How to create 301 redirect rule in functions.php如何在functions.php中创建301重定向规则
【发布时间】:2019-10-24 13:44:13
【问题描述】:

首先,对不起,如果我的英语不完美...

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

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

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

我知道如何从一个链接重定向到另一个链接,但是在每个新闻中单独执行此操作可能是一项繁琐的任务,因为有数百个...有什么方法可以检测模式“/news.html?id =1234" 并将其替换为 " on-1234" (保留数字)以便重定向到该路由?

我已经搜索了有关它的信息,但没有解决方案能满足我的需求。

提前致谢

【问题讨论】:

  • 你现在的重定向怎么样?
  • 我可以使用“get_the_permalink”或重定向插件来完成,但在这两种情况下,我只能单独完成。无论如何,@ninnypants 解决方案运行良好。谢谢

标签: php wordpress url redirect


【解决方案1】:

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

/**
 * Plugin Name: Old News Redirect
 * Plugin URI:
 * Description: Redirect old news urls.
 * Version: 0.0.1
 * Author: ninnypants
 * Author URI:
 * License: GPL2
 */

namespace StackOverflow\OldNews;

function maybe_redirect( $wp ) {
    if ( 'news.html' === $wp->request ) {
        $id = filter_input( INPUT_GET, 'id', FILTER_VALIDATE_INT );
        if ( empty( $id ) ) {
            return;
        }

        wp_safe_redirect( add_query_arg( 'p', $id, home_url() ) );
        exit;
    }
}
add_action( 'parse_request', __NAMESPACE__ . '\maybe_redirect' );

我通过将这段代码放到我的一个测试站点的mu-plugins目录中来测试这段代码,如果您不希望任何用户能够将其关闭或中断,我建议您采用这种方法有人改变了主题。

【讨论】:

  • 完美运行!非常感谢你!我做了一点修改,因为我在导入的帖子 ID 值中添加了“100”以避免与现有帖子发生冲突,所以我将 $id 值更改为“$id = '100'.$id;”并且工作完美。谢谢!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-22
  • 2011-01-05
  • 1970-01-01
  • 2012-12-24
  • 2012-11-07
相关资源
最近更新 更多