如何从REST API返回元数据?

时间:2019-03-16 作者:Lai32290

我在帖子中添加了meta-box-City和Location,但是当我调用端点时(通过WP-restapi)/wp-json/wp/v2/<post_type>/<post_id> 它不会返回我的元数据。

我试着用register_meta 像这样,但仍然不起作用:

register_meta(\'my_post_type\', \'city\', [
    \'type\' => \'string\',
    \'description\' => \'Cidade\',
    \'single\' => true,
    \'show_in_rest\' => true
]);
我该怎么做才能归还它?

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

The first parameter passed to register_meta() is always post for posts, Pages (post type of page) and custom post types.

然而,REST API手册says 即:

之前的WordPress 4.9.8,元字段设置为show_in_rest 使用register_meta 为给定类型的所有对象注册。如果一个自定义帖子类型显示一个元字段,那么所有自定义帖子类型都将显示该元字段。从WordPress 4.9.8开始,可以使用register_meta 使用object_subtype 参数,该参数允许将元密钥的使用减少到particular post type.

所以这应该是可行的:

register_meta(\'post\', \'city\', [
    \'object_subtype\' => \'my_post_type\', // Limit to a post type.
    \'type\'           => \'string\',
    \'description\'    => \'Cidade\',
    \'single\'         => true,
    \'show_in_rest\'   => true,
]);
但是,REST API手册says:

请注意,对于在自定义帖子类型上注册的元字段,帖子类型必须具有custom-fields 支持否则,元字段将不会出现在REST API中。

因此,请确保您的帖子类型支持custom-fields:

register_post_type(
    \'my_post_type\',
    array(
        \'supports\' => array( \'custom-fields\', ... ), // custom-fields is required
        ...
    )
);
另一种解决方案register_rest_field() 您可以轻松使用my_post_type 在代码中。但这当然是一个简化的示例,您应该检查handbook 有关更多信息:

add_action( \'rest_api_init\', function () {
    register_rest_field( \'my_post_type\', \'city\', array(
        \'get_callback\' => function( $post_arr ) {
            return get_post_meta( $post_arr[\'id\'], \'city\', true );
        },
    ) );
} );
此外,元数据将不在中meta, 而是在顶层meta 所有物示例响应正文/字符串:(只是完整响应的一部分)

register_meta(): ,"meta":{"city":"London"},

带有register_rest_field(): ,"meta":[],"city":"London",