在开始时,我将指出预期的结构与自定义帖子类型的默认结构冲突produce
职位。
该问题的解决方案需要更改为自定义类别创建的链接,并对新链接进行适当的解析,以显示正确的帖子。
使用pre_term_link
筛选以更改链接。传递的参数之一是为其生成链接的WP\\u Term对象。如果其分类是produce_category
然后是新的{cpt}/%{taxonomy}%
应该返回结构,即produce/%produce_category%
.
add_filter( \'pre_term_link\', \'se355448_pre_term_link\', 10, 2 );
function se355448_pre_term_link( $termlink, $term )
{
if ( ! $term instanceof \\WP_Term || $term->taxonomy != \'produce_category\' )
return $termlink;
return \'/produce/%produce_category%\';
}
然后,要正确识别链接,请使用
add_rewrite_rule()
函数添加必要的重写规则。如前所述,目标结构与自定义帖子类型的链接冲突
produce
这就是为什么你需要重写
produce_category
分类法,它们应该是
before CPT公司
produce
规则。
add_action( \'init\', \'se355448_rewrite_rules\' );
function se355448_rewrite_rules()
{
$cpt = \'produce\';
$tax = \'produce_category\';
//$terms = [\'fruits-and-vegetables\', \'fish-and-seafood\'];
$terms = get_terms([
\'taxonomy\' => $tax,
\'hide_empty\' => false,
\'fields\' => \'id=>slug\',
]);
if ( is_array($terms) && count($terms) )
{
foreach( $terms as $slug )
{
add_rewrite_rule(
"{$cpt}/{$slug}(?:/page/([0-9]+))?/?$",
"index.php?{$tax}={$slug}&taxonomy={$tax}&post_type={$cpt}&paged=\\$matches[1]",
\'top\'
);
}
}
}
每个术语都需要一个重写规则,所以在添加新术语、删除新术语或更改现有术语的slug后,需要刷新重写规则。这可以通过单击“设置”(Settings)中的“保存”(Save)来完成。
下面的代码将自动使用created_{$taxonomy}
和delete_{$taxonomy}
操作挂钩,更新重写规则after adding or removing 条款来自produce_category
分类学
add_action( \'created_produce_category\', \'se355448_refresh_rules\', 20);
add_action( \'delete_produce_category\', \'se355448_refresh_rules\' );
function se355448_refresh_rules()
{
se355448_rewrite_rules();
flush_rewrite_rules();
}