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",