Wordpress v2 JSON API фильтрует только по идентификатору записи - PullRequest
0 голосов
/ 04 мая 2019

Я установил пользовательский тип записи CRM в Wordpress. Я был приятно удивлен, что он появился со своей собственной моделью в WordPress Backbone API. Я действительно хотел понять это, но я наткнулся здесь на стену.

У меня есть 2 сообщения вышеупомянутого пользовательского типа сообщения, сохраненные в WP. Вот пример того, что я пытаюсь сделать:

var crm = new wp.api.models.Crm();
crm.fetch().then(function(crmItems){
    console.log(crmItems);
});

Прекрасно работает, получает оба сообщения. Они правильного типа сообщения и все. Все хорошо, правда.

Затем еще один тест:

var crm = new wp.api.models.Crm({id: 6257});
crm.fetch().then(function (crmItems) {
    console.log(crmItems);
});

Это тоже работает как положено, возвращает один пост. Все хорошо.

Но тогда:

var crm = new wp.api.models.Crm({data: {per_page: 1}});
crm.fetch().then(function (crmItems) {
    console.log(crmItems);
});

Предполагается, что этот ответ вернет только один пост, но он возвращает оба. Я скопировал параметры из документации и изменил только число с 25 на 1. Я нашел запрос в инструментах разработчика Firefox, вкладка сети. URL запроса https://[my-site]/wp-json/wp/v2/crm Параметры не отправляются. Это странно. Разве URL-адрес запроса не должен выглядеть примерно так: https://[my-site]/wp-json/wp/v2/crm?per_page=1? Вставка этого URL в адресную строку работает нормально и возвращает только один пост, как и ожидалось.

Кроме того, я научился добавлять мета-поля к возвращаемым объектам, например так:

add_action('rest_api_init', function () {
    $fields = array('visibility');
    foreach ($fields as $field) {
        register_rest_field('crm', $field, array(
            'get_callback' => function ($params) use ($field) {
                return get_post_meta($params['id'], $field, true);
            }, 'updata_callback' => function ($value, $object, $fieldName) {
                return update_post_meta($object->ID, $fieldName, $value);
            },'schema' => array(
                'description' => __( 'Visibility.' ),
                'type'        => 'string'
            )
        ));
    }
});

Поле отображается, хорошо, но я не смог найти хорошего руководства, которое помогло бы мне понять, как фильтровать выборку коллекции, используя это поле. Как это сделать?

...