Создайте таксономию с метатермом с помощью 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.

Author: Alvaro, 2016-12-28

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);
}
 3
Author: alexwc_, 2018-11-09 19:17:24

Вы должны передать свое мета-значение в виде массива в свой мета-ключ.

var place_new = new wp.api.models.Place({
    name: 'the name',// works
    description: 'the description',// works

    meta: {
        "my_meta": [
            "new_meta_value"
        ]
    }

});
 0
Author: Tunji, 2016-12-30 14:34:25