使用自定义字段值从404页面重定向

时间:2016-05-12 作者:Abouasy

我正在从旧的CMS迁移到WordPress。

旧文章保存为帖子,新WordPress永久链接为%post id%。

旧的URL slug是唯一的,并保存为每个帖子的自定义字段;自定义字段名为“old\\u url”。

For example:

<发布ID:123自定义字段名称:old\\u url自定义字段值:/servlet/Satellite?c=条款A\\U c&;cid=1189064956899我想使用old_url 从旧链接重定向到新链接。

因此,如果有人请求“domain.com/servlet/Satellite?c=ArticleA\\u c&cid=1189064956899”,他将被重定向到新的永久链接,而不会收到404错误。

1 个回复
SO网友:Howdy_McGee

我不能说我会建议在高负载系统上使用它,如果这些系统应该在HTAccess中使用301\'d或有自己的自定义表来关联的话。下面是一个解决方案,它将获取请求的URL并尝试查找具有匹配元的帖子:

/**
 * Redirect 404s based on requested url
 *
 * @return void
 */
function wpse_226378() {
    global $wp;

    if( is_404() ) {
        $current_url = add_query_arg( $_REQUEST,$wp->request );     // Get current requested URL ( minus the domain )
        $page = get_posts( array(                                   // Get a single post that has that URL as a post meta
            \'post_type\'         => \'page\',
            \'posts_page_page\'   => 1,
            \'meta_key\'          => \'old_url\',
            \'meta_value\'        => sanitize_text_field( $current_url ),
            \'fields\'            => \'ids\',
        ) );

        if( ! empty( $page ) ) {                                    // IF it\'s found
            wp_safe_redirect( get_permalink( $page[0] ), 301 );     // 301 redirect it
            exit;                                                   // Exit script entirely
        }
    }
}
add_action( \'template_redirect\', \'wpse_226378\' );

相关推荐

Redirect htaccess

我需要帮助重定向我的页面。例如,我有网站https://example.com. 我需要将内容从https://example.com 到https://example.com/blog. 这不是问题,我通过更改主页URL来做到这一点。这很有效。但现在我需要添加来自旧的重定向https://example.com 到https://xmpl.com.我想用。htaccess,但这不起作用。你们能帮帮我吗?以下是我对此的一些尝试,但两者都不起作用。RewriteEngine On RewriteRu