我正在使用为一家玻璃吹制企业购买的wordpress主题,它为我提供了一种称为“ portfolio”的自定义帖子类型。
我要做的是重写该自定义帖子类型的标签,以使其与产品类型匹配。
如果产品在“照明”类别下,则URL为domain.com/ 照明 /产品名称
如果产品在“对象”类别下,则URL为 domain.com/ 对象 /产品名称
通过将以下代码添加到子主题的functions.php中,我可以获得所需的永久链接结构,但是当我这样做时,我所有其他页面(减去主页)都返回404。
add_filter( 'register_post_type_args', 'dynamic_keep_product_slug', 10, 2 );
function dynamic_keep_product_slug( $args, $post_type ) {
if ( 'portfolio' === $post_type ) {
$my_args = array(
'rewrite' => array( 'slug' => '%project-type%', 'with_front' => true ),
'hierarchical' => true,
'taxonomies' => array('category')
);
return array_merge( $args, $my_args );
}
return $args;
}
function keep_product_link( $post_link, $id = 0 ) {
$post = get_post($id);
$terms = wp_get_object_terms( $post->ID, 'project-type' );
if( $terms ){
return str_replace( '%project-type%' , $terms[0]->slug , $post_link );
} else {
return str_replace( '%project-type%' , 'products' , $post_link );
}
return $post_link;
}
add_filter( 'post_type_link', 'keep_product_link', 10, 2 );
我不是专家,所以有人可以告诉我我在哪里错了吗?有没有更好的方法可以为帖子类型提供多个子弹选项?
答案 0 :(得分:0)
您可能必须(重新)保存永久链接。更改分类法和子词之类的内容后,如果未更改则得到404。转到WP仪表板,然后转到“设置”>“永久链接”,然后单击“保存”。
此外,您可以考虑另一种方法。保持CPT不变,并为其创建类别,照明,对象等。然后从网址中删除CPT段。它将使CPT类别中断,这就是您想要的。请注意,在这种情况下,您不会有任何以“投资组合”开头的页面或帖子,否则会发生冲突。除了可以正常工作外,我还用woocommerce做到了这一点,隐藏了“产品”子弹,但保留类别的子弹