WordPress post_link 产生无法访问的永久链接

问题描述 投票:0回答:1

我编写了以下代码来更改某些特定类别的帖子的永久链接,如下所示:

/* 2024-12-04: Define custom permalinks for some specific posts */
function post_custom_permalink($permalink, $post) {
    // Check if post belongs to some specific categories
    if (has_category('case-studies', $post)) {
        $permalink = home_url('case-studies/' . $post->post_name . '/');
        return $permalink;
    }
    else if (has_category('guides', $post)) {
        $permalink = home_url('guides/' . $post->post_name . '/');
        return $permalink;
    }
    else if (has_category('tools', $post)) {
        $permalink = home_url('tools/' . $post->post_name . '/');
        return $permalink;
    }    
    
    // For all other cases, return the original permalink
    return $permalink;
}
add_filter('post_link', 'post_custom_permalink', 10, 2);

现在的问题是:当我使用类别工具创建帖子“测试工具”时,其永久链接显示为https://www.sample.com/tools/test-tool/

但是当我访问https://www.sample.com/tools/test-tool/时,我会收到 404 not found 错误。如果我访问 https://www.sample.com/test-tool/,我就可以看到该帖子。为什么?

wordpress hook permalinks
1个回答
0
投票

使用

post_link
过滤器仅更改链接,它不会通知WordPress关于永久链接更改的重写规则。为了支持更改,请使用
add_rewrite_rule()
函数
定义用于访问帖子的附加规则(未经测试):

add_action( 'init', static function () : void {
   add_rewrite_rule( '^case-studies/([^/]+)(?:/([0-9]+))?/?$', 'index.php?name=$matches[1]&page=$matches[2]', 'top' );
    ...
} );

记得在实现后刷新重写规则。

© www.soinside.com 2019 - 2024. All rights reserved.