我正在尝试使用RESTAPI v2从前端创建分类元素(分类已经注册)。我可以这样做,只是无法保存分类法中的元字段。
我有一个注册的分类法(“place”),我正在尝试使用Rest Api为其创建元素。
分类法有一个术语meta(“my\\u meta”)。我能够从分类法中获得信息:
add_action( \'rest_api_init\', \'slug_register_meta\' );
function slug_register_meta() {
register_rest_field( \'place\',
\'meta\',
array(
\'get_callback\' => \'slug_get_meta\',
\'update_callback\' => null,
\'schema\' => null,
)
);
}
function slug_get_meta( $object, $field_name, $request ) {
return get_term_meta( $object[ \'id\' ] );
}
这让我可以在访问时获取信息:/wp json/wp/v2/place/53
{
"id": 53,
"count": 0,
...
"taxonomy": "place",
"meta": {
"my_meta": [
"the meta value"
]
},
...
}
我可以通过JavaScript注册一个新的分类元素:
var place_new = new wp.api.models.Place({
name: \'the name\',// works
description: \'the description\',// works
my_meta: \'test1\',// doesn\'t work
fields: {// doesn\'t work
my_meta: \'test3\'
},
meta: {// doesn\'t work
my_meta: \'test2\'
}
});
place_new.save();
The problem is the my_meta value won\'t save, 我不知道如何引用它,也不知道是否缺少一些PHP。
最合适的回答,由SO网友:alexwc_ 整理而成
我想你需要一个update_callback
在里面register_rest_field()
. 请注意,我还没有对此进行测试。
add_action( \'rest_api_init\', \'slug_register_meta\' );
function slug_register_meta() {
register_rest_field( \'place\',
\'meta\',
array(
\'get_callback\' => \'slug_get_meta\',
\'update_callback\' => \'slug_update_meta\',
\'schema\' => null,
)
);
}
function slug_get_meta( $object, $field_name, $request ) {
return get_term_meta( $object[ \'id\' ] );
}
function slug_update_meta($value, $object, $field_name){
// please note: make sure that $object is indeed and object or array
return update_post_meta($object[\'id\'], $field_name, $value);
}