如何在Gutenberg中获取正在编辑的非层次自定义帖子类型的父项

时间:2020-07-03 作者:leemon

使用post_parent 中的属性WP_Post 类创建不同自定义帖子类型之间的1对n关系。

在我正在开发的插件中,我添加了SelectControlPluginDocumentSettingPanel 能够在其他自定义帖子类型中设置相关自定义帖子类型的id。根据文件,我应该使用getEditedPostAttribute 检索当前;“父级”;正在编辑的自定义帖子类型的(相关自定义帖子类型的id):

select( \'core/editor\' ).getEditedPostAttribute( \'parent\' )
但是,出于某种原因,我undefined 价值,即使post_parent 属性已设置。经典编辑器中的自定义元框可以正确显示它。

如果我设置hierarchical 自定义帖子类型中的属性true, 选择器工作,我得到了正确的值。这是故意的吗?还是现在我们必须使用自定义的元字段来存储这些数据?

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

您已经在使用正确的Gutenberg/JS代码,但REST API中存在一个限制,它公开了parent 字段仅适用于分层职位类型,如page. 但您可以通过以下方式强制该字段出现在REST API响应中register_rest_field() — a的示例my_cpt 岗位类型:

register_rest_field( \'my_cpt\', \'parent\', array(
    \'schema\' => array(
        \'description\' => __( \'The ID for the parent of the post.\' ),
        \'type\'        => \'integer\',
        \'context\'     => array( \'view\', \'edit\' ),
    ),
) );
或者,您可以使用rest_prepare_<post type> hook 只需添加parent 在回复中:

add_filter( \'rest_prepare_my_cpt\', function ( $response, $post ) {
    $data = $response->get_data();
    $data[\'parent\'] = $post->post_parent;
    $response->set_data( $data );

    return $response;
}, 10, 2 );
但如果希望允许通过REST API编辑父级,则首选第一个选项。