从动态URL中删除部分并重定向

时间:2020-01-09 作者:Arjen de Jong

如何将以下URL重定向到下一个URL?它本质上应该删除ID部分(这是一个标签后URL)
http://wpsoup.test/tag/88/koffie/ -> http://wpsoup.test/tag/koffie/.

我尝试了以下代码函数来反向创建URL(它们来自一个使用SPA作为前端、WordPress作为后端的网站,这意味着我需要反向这种行为,因为大多数(如果不是全部)帖子都有与此类URL的链接),但它们不起作用(即使在permalink刷新之后)。是否只能用.htaccess?

function replace_tag_link($taglink, $tag_id) {
    $tag = get_tag($tag_id);
    $tag_name = $tag->slug;
    return str_replace($taglink, $tag_name, "$tag_id/$tag_name");
}
add_filter(\'tag_link\', \'replace_tag_link\', 10, 2);

// and...

function replace_tag_link($qv) {
    if (array_key_exists(\'tag\', $qv)) {
        $tag = get_term_by(\'name\', $qv[\'tag\'], \'post_tag\');
        $qv[\'tag\'] = "{$tag->term_id}/{$qv[\'tag\']}";
    }
}
add_filter(\'request\', \'replace_tag_link\', 10, 1);

1 个回复
SO网友:Arjen de Jong

我用以下代码修复了它:

/**
 * Redirect \'/tag/[0-9]/{tag_name}/\' to the correct tag.
 */
add_filter(\'request\', function($qv) {
    if (array_key_exists(\'category_name\', $qv) && preg_match(\'/(tag\\/)([0-9]*)/\', $qv[\'category_name\'])) {
        $qv = [
            \'tag\' => $qv[\'name\']
        ];
    }

    return $qv;
});
我不确定这是不是正确的方法,但它是有效的!