在JSON REST API中获取块属性

时间:2019-04-01 作者:ebell

我正在尝试使我的块属性显示在REST API中。

首先,我添加了rest_api_init 钩子将我的区块列入白名单。

add_action(
    \'rest_api_init\',
    function () {

        if ( ! function_exists( \'use_block_editor_for_post_type\' ) ) {
            require ABSPATH . \'wp-admin/includes/post.php\';
        }

        // add Location Block to the WordPress REST API
        $post_types = get_post_types_by_support( [ \'editor\' ] );
        foreach ( $post_types as $post_type ) {
            if ( use_block_editor_for_post_type( $post_type ) ) {
                register_rest_field(
                    $post_type,
                    \'blocks\',
                    [
                        \'get_callback\' => function ( array $post ) {
                            $raw_blocks= parse_blocks( $post[\'content\'][\'raw\'] );
                            $whitelisted_blocks = [];
                            foreach ($raw_blocks as $raw_block) {
                                if( $raw_block[\'blockName\']==\'myplugin/block-map-location\' ){
                                    array_push($whitelisted_blocks, $raw_block);
                                }
                            }
                            return $whitelisted_blocks;
                        },
                    ]
                );
            }
        }
    }
);
这将输出我的原始块内容,但attrs 数组为空。

blocks: 
  0:
  blockName:    "myplugin/block-map-location"
  attrs:    []
  innerBlocks:; []
  innerHTML:    "\\n<div class=\\"wp-block-myplugin-block-map-location\\" aria-label=\\"Interactive Map\\" role=\\"region\\"><figure><div class=\\"map-pp\\" id=\\"placepress-map\\" data-lat=\\"41.50214445\\" data-lon=\\"-81.6751670486689\\" data-zoom=\\"13\\" data-basemap=\\"carto_voyager\\"></div><figcaption class=\\"map-caption-pp\\">This is the map caption.</figcaption></figure></div>\\n"
  innerContent: 
    0:  "\\n<div class=\\"wp-block-myplugin-block-map-location\\" aria-label=\\"Interactive Map\\" role=\\"region\\"><figure><div class=\\"map-pp\\" id=\\"placepress-map\\" data-lat=\\"41.50214445\\" data-lon=\\"-81.6751670486689\\" data-zoom=\\"13\\" data-basemap=\\"carto_voyager\\"></div><figcaption class=\\"map-caption-pp\\">This is the map caption.</figcaption></figure></div>\\n"
为了解决这个问题,我用古腾堡手册中的例子尝试了以下方法,但似乎没有任何效果。(请注意,在本例中,我正在使用自定义的“locations”帖子类型,并试图从我的块中获取“lat”和“lon”属性。)

add_action( \'init\', \'register_block_attributes\' );
function register_block_attributes() {
    register_meta( \'post\', \'lat\', array(
        \'object_subtype\' => \'locations\',
        \'show_in_rest\' => true,
    ) );
    register_meta( \'post\', \'lon\', array(
        \'object_subtype\' => \'locations\',
        \'show_in_rest\' => true,
    ) );
}
我显然遗漏了一些东西,但在文档中找不到任何答案。

1 个回复
SO网友:ebell

回答我自己的问题。自从register_meta() 实际附加到meta, 不blocks, 在JSON输出中,我只是使用source:meta 在这里,我可以手动管理用于显示块的属性之外的属性。

attributes: {
  api_coordinates: {
    type: \'string\',
    source: \'meta\',
    meta: \'api_coordinates\',
  }, //...
}

相关推荐

400错误请求-JavaScript应用程序调用自定义wp-json终结点

我已成功创建了新的端点/路由,可以通过wp-json. 不仅如此,我还可以使用Restlet客户端从浏览器外部成功地向该端点发出post请求。我的端点句柄json 在请求主体内,转换和编辑数据,然后进行外部api调用,然后从外部api将新数据发送回客户端。然而,当我在wordpress站点上运行调用此api的应用程序时,我得到400 Bad Request. 我处理函数中许多地方的错误,并根据数据中可能出现的错误类型发回特定的错误消息,但我似乎找不到这些错误的来源。我已设置WP_DEBUG 到true,