WordPress多CPT固定链接按post_id设置异常:规则误应用所有CPT
解决自定义文章类型固定链接仅针对特定CPT生效的问题
我完全懂你的困扰——本来只想让teams这个自定义文章类型用post ID作为固定链接,结果代码一跑,连players的链接也跟着变了,完全偏离了你的预期。问题出在你之前的代码没有做严格的文章类型判断,导致所有自定义文章类型都触发了这个链接修改规则。
修复后的代码示例
你只需要在钩子回调函数里加一个条件判断,只对teams类型的文章生效:
function set_teams_permalink_to_post_id($post_link, $post) { // 仅处理teams类型的自定义文章 if ($post->post_type !== 'teams') { return $post_link; // 其他类型直接返回原有链接 } // 返回以post ID为路径的固定链接 // 如果想保留/teams/前缀,可以改成:home_url('/teams/' . $post->ID . '/') return home_url('/' . $post->ID . '/'); } add_filter('post_type_link', 'set_teams_permalink_to_post_id', 10, 2);
关键注意事项
- 刷新重写规则:修改代码后,一定要进入WordPress后台的「设置」→「固定链接」页面,不用修改任何选项,直接点击「保存更改」。这一步会让WordPress更新重写规则,确保新的固定链接能正常访问。
- 可选:保留类型前缀:如果你希望
teams的链接看起来更清晰(比如example.com/teams/123/而不是example.com/123/),只需要把返回的链接改成home_url('/teams/' . $post->ID . '/')即可。 - 避免冲突:如果你的
playersCPT有自己的自定义链接规则,确保它的回调函数也做了对应的类型判断,防止互相干扰。
这样修改后,只有teams的固定链接会变成post ID格式,players的链接会保持你原本设置的样式。
内容的提问来源于stack exchange,提问作者Sean Turtle
相关产品推荐
相关产品推荐

