Фильтр WP API по почтовой схеме

Можно ли вернуть список сообщений на основе Wordpress Rest API v2 на основе их схемы:

Список схем: http://v2.wp-api.org/reference/posts/< /а>

Я хочу фильтровать по липкому полю, но то же самое будет и с остальными полями.

Пока у меня есть:

/wp-json/wp/v2/posts?filter[sticky]=true
/wp-json/wp/v2/posts?filter[sticky]=1

Оба возвращают тот же ответ, что и стандартная конечная точка:

/wp-json/wp/v2/posts

Я читал другие материалы, в которых подробно описывается, как сортировать по meta или собственные таксономии, но я не Не верю, что это то же самое.


person user3525989    schedule 24.01.2016    source источник
comment
Может показаться, что это еще не реализовано   -  person random_user_name    schedule 24.01.2016
comment
Очевидно, это должно быть реализовано через filter[ignore_sticky_posts]=true|false, но у меня это не работает в Beta11. Текущее расследование здесь: github.com/WP-API/WP-API/issues/ 2210   -  person Laust Deleuran    schedule 01.02.2016


Ответы (2)


Изучив документацию, просмотрев и опубликовав проблемы в репозитории WP-API на Github, стало ясно, что filter[ignore_sticky_posts] должен переключать ожидаемое поведение сортировки, чтобы прикрепленные записи всегда были первыми (по умолчанию) или игнорировались (с помощью filter[ignore_sticky_posts]=true).

Однако существует ошибка в WP API, из-за которой флаг filter[ignore_sticky_posts] непригоден для использования.

Лучший способ исправить это сейчас — создать собственную конечную точку, чтобы получить данные или идентификаторы всех прикрепленных сообщений в вашей базе данных. Просмотрев код, обсуждаемый в этой теме и в документации WP-API я думаю, что добавление следующего кода в ваш functions.php должно сделать трюк:

// Sticky posts in REST - https://github.com/WP-API/WP-API/issues/2210
function get_sticky_posts() {
    $posts = get_posts(
        array(
            'post__in' => get_option('sticky_posts')
        )
    );

    if (empty($posts)) {
        return null;
    }

    return $posts;
}
add_action( 'rest_api_init', function () {
    register_rest_route( 'THEME_NAME/v1', '/sticky', array(
        'methods' => 'GET',
        'callback' => 'get_sticky_posts',
    ));
});

Если вы GET /wp-json/THEME_NAME/v1/sticky, вы должны получить массив всех ваших прикрепленных сообщений.

Надеюсь, это поможет.

person Laust Deleuran    schedule 02.02.2016

В дополнение к ответу Лауста Делерана (спасибо Лаусту!), я создал измененную версию его сценария, которая позволяет вам использовать функцию embedded REST-api.

Хотя это может быть не «самое чистое» решение, оно позволяет вам в полной мере использовать функциональность wp-json.


function get_sticky_posts(WP_REST_Request $request) {

    $request['filter'] = [
        'post__in' => get_option('sticky_posts')
    ];

    $response = new WP_REST_Posts_Controller('post');
    $posts = $response->get_items($request);

    return $posts;
}

add_action( 'rest_api_init', function () {
    register_rest_route( 'THEME_NAME/v1', '/sticky', array(
        'methods' => 'GET',
        'callback' => 'get_sticky_posts',
    ));
});

Это выведет липкое posts в том же schema, что и обычный /wp-json/wp/v2/posts запрос.

person mvaessen    schedule 27.07.2016