重写自定义帖子类型的代码时,为什么要显示页面404?

时间:2019-04-14 01:13:03

标签: php wordpress custom-post-type permalinks

我正在使用为一家玻璃吹制企业购买的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 );

我不是专家,所以有人可以告诉我我在哪里错了吗?有没有更好的方法可以为帖子类型提供多个子弹选项?

1 个答案:

答案 0 :(得分:0)

您可能必须(重新)保存永久链接。更改分类法和子词之类的内容后,如果未更改则得到404。转到WP仪表板,然后转到“设置”>“永久链接”,然后单击“保存”。

此外,您可以考虑另一种方法。保持CPT不变,并为其创建类别,照明,对象等。然后从网址中删除CPT段。它将使CPT类别中断,这就是您想要的。请注意,在这种情况下,您不会有任何以“投资组合”开头的页面或帖子,否则会发生冲突。除了可以正常工作外,我还用woocommerce做到了这一点,隐藏了“产品”子弹,但保留类别的子弹