WordPress自定义文章类型URL重写slug未替换问题求助
问题分析
你注册的Book自定义文章类型将rewrite slug设为/%author%/books,但WordPress默认不会自动把自定义分类法的占位符替换为实际分类slug,导致get_permalink()返回带占位符的不完整链接。
解决方案
添加post_type_link过滤器,手动把链接中的%author%占位符替换为当前书籍对应的Author分类slug。
完整修改代码
将以下代码添加到主题的functions.php文件中:
function replace_book_author_permalink( $post_link, $post ) { // 仅处理book类型的文章 if ( 'book' !== $post->post_type ) { return $post_link; } // 获取当前书籍关联的author分类slug $authors = wp_get_post_terms( $post->ID, 'author', array( 'fields' => 'slugs' ) ); // 存在关联作者时替换占位符 if ( ! empty( $authors ) ) { $post_link = str_replace( '%author%', $authors[0], $post_link ); } return $post_link; } add_filter( 'post_type_link', 'replace_book_author_permalink', 10, 2 );
代码说明
- 通过
post_type_link钩子拦截自定义文章类型的链接生成流程 - 仅对
book类型的文章做处理,不影响其他内容类型 - 用
wp_get_post_terms()获取当前书籍绑定的Author分类slug - 将链接中的
%author%占位符替换为实际分类slug,默认取第一个关联的作者分类(若需支持多作者可自行调整逻辑)
注意事项
- 代码保存后,务必再次访问WordPress后台「设置-固定链接」页面并点击保存,确保重写规则刷新生效
- 若你的业务场景允许书籍关联多个作者分类,可根据需求修改代码逻辑(比如拼接多个slug、指定优先级等)
内容的提问来源于stack exchange,提问作者Christian
相关产品推荐
相关产品推荐

