WP API V2: Запрос сообщений от ACF

Я хотел бы запросить свои сообщения, отфильтровав пользовательские метаданные, добавленные с помощью расширенных настраиваемых полей. Это логическая мета, поэтому каждый пост будет иметь что-то вроде:

ПОЛУЧИТЬ http://localhost/wp-json/wp/v2/posts

{
  ...
  "acf" : {
    "highlight" : true
  }
  ...
}

Я не могу фильтровать по этому мета-значению, даже если я предоставил мета_ключ и мета_значение для REST API в function.php:

function my_add_meta_vars ($current_vars) {
    $current_vars = array_merge ($current_vars, array ('meta_key', 'meta_value'));
    return $current_vars;
}
add_filter ('rest_query_vars', 'my_add_meta_vars');

Но если я попытаюсь:

ПОЛУЧИТЬ http://localhost/wp-json/wp/v2/posts?filter[meta_key]=highlight&filter[meta_value]=true

Я вижу все сообщения, как будто фильтр игнорируется.


person LucaP    schedule 22.01.2018    source источник
comment
Параметр фильтра был отключен, когда REST API был объединен с WP Core. Вы можете добавить его обратно с помощью плагина rest-filter. Вот статья: developer.wordpress.org/rest-api/using-the-rest-api/ А вот ссылка на плагин фильтра: github.com/wp-api/rest-filter   -  person codescribblr    schedule 12.05.2018


Ответы (1)


Я смог решить эту проблему с помощью этой настройки:

add_filter( 'rest_query_vars', function ( $valid_vars ) {
    return array_merge( $valid_vars, array( 'highlight', 'meta_query' ) );
} );
add_filter( 'rest_post_query', function( $args, $request ) {
    $highlight   = $request->get_param( 'highlight' );

    if ( ! empty( $highlight ) ) {
        $args['meta_query'] = array(
            array(
                'key'     => 'highlight',
                'value'   => $highlight,
                'compare' => '=',
            )
        );      
    }

    return $args;
}, 10, 2 );

И сделайте запрос таким образом (выделите acf boolean)

ПОЛУЧИТЬ /wp-json/wp/v2/posts?highlight=1

person LucaP    schedule 22.01.2018
comment
Как будет выглядеть этот код, если в качестве ответа ожидается только один объект, а не массив? - person Adrian Rosca; 14.08.2018