我编写了以下代码来更改某些特定类别的帖子的永久链接,如下所示:
/* 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/,我就可以看到该帖子。为什么?
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' );
...
} );
记得在实现后刷新重写规则。