Создайте таксономию с метатермом с помощью api WP Rest
Я пытаюсь создать элементы таксономии (таксономии уже зарегистрированы) с помощью интерфейса REST Api v2. Я могу это сделать, за исключением того, что не могу сохранить мета-поля из таксономий.
У меня есть зарегистрированная таксономия ("место"), и я пытаюсь создать для нее элементы с помощью Api Rest.
В таксономии есть термин мета ("my_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/место/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();
Проблема в том, что значение my_meta не сохранит, я не уверен, как на него ссылаться, или если мне не хватает какого-то PHP.
2 answers
Я думаю, вам нужен 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);
}
Вы должны передать свое мета-значение в виде массива в свой мета-ключ.
var place_new = new wp.api.models.Place({
name: 'the name',// works
description: 'the description',// works
meta: {
"my_meta": [
"new_meta_value"
]
}
});