分类法的permalink结构将与页面的默认结构冲突。
就地址而言domain.com/item-one/item-two
Wordpress如何知道这是一个页面item-two
使用父页item-one
or item-two
是自定义帖子类型,并且item-one
是的期限region
分类学
重写规则的顺序将决定,因为您的结构的规则将是第一个,所以链接到子页面(如domain.com/parent-page/child-page
) 将被定向到分类页(分类法=“区域”、术语=“父页”、post\\u类型=“子页”)。
有两种方式,我会选择第一种。
在结构中添加一些前缀,例如。regions/{term}/{cpt_slug}
为所有术语生成重写规则(downtown
和其他)来自region
分类法(每个术语一条规则)。添加和删除自定义分类术语后,必须重复生成。
在这两种情况下,要使重写规则起作用,您必须单击Save 在里面Dashboard -> Settings -> Permalinks
或使用flush_rewrite_fules()
("important note")
我使用了选项1regions
作为url前缀和region_cpt
作为查询变量名,您可以将它们更改为您喜欢的名称。
add_action( \'init\', \'se333633_rewrite_tags\', 10 );
add_action( \'init\', \'se333633_rewrite_rules\' );
add_action( \'pre_get_posts\', \'se333633_pre_get_posts\', 30 );
function se333633_rewrite_tags()
{
add_rewrite_tag( \'%region_cpt%\', \'([^/]+)\' );
}
function se333633_rewrite_rules()
{
add_rewrite_rule(
\'^regions/([^/]+)/([^/]+)/?$\',
\'index.php?taxonomy=region®ion=$matches[1]®ion_cpt=$matches[2]\',
\'top\'
);
}
function se333633_pre_get_posts( $query )
{
$cpt_for_region = get_query_var( \'region_cpt\', false );
if ($cpt_from_region !== false && $query->is_main_query() )
{
$query->query_vars[\'post_type\'] = $cpt_for_region;
}
}
代码中的选项2
option #1,
se333633_rewrite_rules
添加了更改和两个新函数,以在术语更改后刷新重写规则。
add_action( \'created_term\', \'se333633_created_term\', 20, 3);
add_action( \'delete_region\', \'se333633_region_term_deleted\' );
function se333633_rewrite_rules()
{
$region_terms = get_terms([
\'taxonomy\' => \'region\',
\'hide_empty\' => false,
\'fields\' => \'id=>slug\',
]);
if ( is_array($region_terms) && count($region_terms) )
{
foreach( $region_terms as $slug )
{
add_rewrite_rule(
\'^\'.$slug.\'/([^/]+)/?$\',
\'index.php?taxonomy=region®ion=\'. $slug. \'®ion_cpt=$matches[1]\',
\'top\'
);
}
}
}
function se333633_created_term ( $term_id, $tt_id, $taxonomy )
{
if ( $taxonomy != \'region\')
return;
flush_rewrite_rules();
}
function se333633_region_term_deleted( $term )
{
flush_rewrite_rules();
}