我们可以在另一个自定义帖子下添加自定义帖子吗

问题描述

我有以下场景。

我有自定义帖子类型“项目”,其中包含必要的自定义分类法和自定义标签。现在要求是每个“项目”数据都有自己不同的页面(与页面的acf相同)作为详细信息页面菜单

所以我想在帖子类型“项目”下添加一个自定义帖子类型作为“项目页面”,并将其视为wordpress页面。这可能吗 ?我尝试在另一种帖子类型下搜索自定义帖子类型,但无济于事。我该如何处理这个问题,以便页面的永久链接中也包含项目 slug。

欢迎任何帮助/建议。

解决方法

您可以使“项目”帖子类型分层。
然后在子页面上使用父关系。

register_post_type('project',array(
    'hierarchical' => true,'supports' => array('page-attributes'),// show the parent select box on the editor page
    ... // Your other settings here
))

我不确定,如果父子关系要求两个帖子的帖子类型相同。也许你可以尝试两种不同的类型。

这个解决方案至少有你想要得到的嵌套 URL。我不确定与 ACF 的集成,因为孩子们是相同的帖子类型。

编辑:既然你提到了 ACF,你可以使用 Relationship field type

,

找到了是否可以在另一种自定义帖子类型下添加自定义帖子类型的答案。这是可能的。只需在注册自定义帖子类型时添加以下代码即可。

'show_in_menu' => 'edit.php?post_type=project',

关于项目页面永久链接以包含项目 slug,我从前面手动创建了它(在管理部分没有查看和永久链接访问权限)。在管理部分,我制作了 acf 'Post Object' 来将页面与项目相关联。为了显示项目页面的详细信息页面,我执行了以下操作。

add_action( 'init',function() {
    $url_path   = trim( parse_url( add_query_arg( array() ),PHP_URL_PATH ),'/' );
    $count      = count( explode( '/',$url_path ) );
    $slug       = end( explode( '/',$url_path ) );
    $postdetail = get_page_by_path( $slug,OBJECT,'project_page' );
    if ( isset( $postdetail ) && ! empty( $postdetail ) ) {
        set_query_var( 'breadcrumb_id',$postdetail->ID );
        $params = array(
            'current_id' => $postdetail->ID,);
        $load = locate_template( 'templates/single/project_page.php',true,$params );
        if ( $load )
            exit();
    } else {
        return;
    }
});

到目前为止,这解决了我的问题。仍在寻找最佳选择。