我试图建立一个具有永久链接的多级自定义帖子类型结构authors/books/chapters
,其作者,书籍和章节均设置为自己的自定义帖子类型。例如,此网站上的典型URL可能看起来像example.com/authors/stephen-king/the-shining/chapter-3/
每章只能属于一本书,每本书只能属于一位作者。我考虑过使用分类法代替作者和书籍的CPT,但是我需要将元数据与每个项目相关联,为此我更喜欢发布界面。
在大多数情况下,我都会通过简单地将每个自定义帖子设置为CPT上一级条目的子级来实现。例如,我创建“第3章”,并使用自定义元框将“发光”指定为父对象。“ The Shining”又将“ Stephen King”作为父母。建立这些关系我没有任何麻烦。
我在CPT子弹中使用了重写标签,并且永久链接想要工作,但它们不太正确。使用重写分析器,我可以看到重写规则实际上是生成的,但是它们似乎顺序不正确,因此其他规则将首先处理。
这是我注册我的CPT的方式:
function cpt_init() {
$labels = array(
'name' => 'Authors'
);
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'rewrite' => array(
'slug' => 'author',
'with_front' => FALSE,
),
'with_front' => false,
'capability_type' => 'post',
'has_archive' => false,
'hierarchical' => true,
'menu_position' => null,
'supports' => array( 'title', 'editor' )
);
register_post_type('authors',$args);
$labels = array(
'name' => 'Books'
);
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'rewrite' => array(
'slug' => 'author/%authors%',
'with_front' => FALSE,
),
'with_front' => false,
'capability_type' => 'post',
'has_archive' => false,
'hierarchical' => true,
'menu_position' => null,
'supports' => array( 'title', 'editor' )
);
register_post_type('books',$args);
$labels = array(
'name' => 'Chapters'
);
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'rewrite' => array(
'slug' => 'author/%authors%/%books%',
'with_front' => FALSE,
),
'with_front' => FALSE,
'capability_type' => 'post',
'has_archive' => false,
'hierarchical' => true,
'menu_position' => null,
'supports' => array( 'title', 'editor' )
);
register_post_type('chapters',$args);
}
add_action( 'init', 'cpt_init' );
那么,有什么方法可以改变我的重写规则的优先级,从而使作者,书籍和章节都首先匹配?
我也知道我将不得不添加一个post_type_link
过滤器,但这似乎首先使固定链接正确。如果有人知道我在哪里可以找到该过滤器工作原理的全面概述,将不胜感激。