Дополнительные аргументы и запросы для WordPress API V2 игнорируются при обновлении до WP 4.7.

У меня есть веб-сайт, на котором используется плагин WordPress REST API V2. Я использовал приведенный ниже код, чтобы добавить дополнительный аргумент (фильтр), который я мог бы использовать при вызове сообщений, помеченных с помощью пользовательской таксономии topics. Сайту требовалась возможность добавлять в запрос несколько терминов таксономии и отображать любые сообщения, содержащие любой из указанных терминов, но только сообщения, содержащие один из указанных терминов.

add_action( 'rest_query_vars', 'custom_multiple_topics' );
function custom_multiple_topics( $vars ) {
    array_push( $vars, 'tax_query' );
    return $vars;
}

add_action( 'rest_post_query', 'custom_topic_query', 10, 2 );
function custom_topic_query( $args, $request ) {

    if ( isset($args[ 'topics' ]) ) {
        $pre_tax_query = array(
            'relation' => 'OR'
        );

        $topics = explode( ',', $args['topics'] );  // NOTE: Assumes comma separated taxonomies
        for ( $i = 0; $i < count( $topics ); $i++) {
            array_push( $pre_tax_query, array(
                'taxonomy' => 'topic',
                'field' => 'slug',
                'terms' => array( $topics[ $i ] )
            ));
        }

        $tax_query = array(
            'relation' => 'AND',
            $pre_tax_query
        );

        unset( $args[ 'topics' ] );  // We are replacing with our tax_query
        $args[ 'tax_query' ] = $tax_query;
    }

} // end function

Пример вызова API будет примерно таким: http://example.com/wp-json/wp/v2/posts?per_page=10&page=1&filter[topics]=audit,data

Все это прекрасно работало до обновления до WordPress 4.7. После обновлений эти аргументы игнорируются. Я не уверен, с чего начать, чтобы решить эту проблему. Ошибок PHP или Javascript на сайте нет, пользовательский фильтр просто игнорируется. После обновления все сообщения отображаются по этому запросу независимо от того, чем они помечены.

Кто-нибудь сталкивался с этой проблемой при обновлении?


person Marc    schedule 23.01.2017    source источник


Ответы (1)


Я нашел решение этой проблемы. Оказывается, действие rest_query_vars больше не используется после обновления.

Решение достаточно простое. Мне пришлось обновить код, запускающий действие rest_post_query, чтобы протестировать $request, а не $args.

Вот мое решение, которое заменяет весь код в вопросе:

add_action( 'rest_post_query', 'custom_topic_query', 10, 2 );
function custom_topic_query( $args, $request ) {

    if ( isset($request['filter']['topics']) ) {
        $pre_tax_query = array(
            'relation' => 'OR'
        );

        $topics = explode( ',', $request['filter']['topics'] );  // NOTE: Assumes comma separated taxonomies
        for ( $i = 0; $i < count( $topics ); $i++) {
            array_push( $pre_tax_query, array(
                'taxonomy' => 'topic',
                'field' => 'slug',
                'terms' => array( $topics[ $i ] )
            ));
        }

        $tax_query = array(
            'relation' => 'AND',
            $pre_tax_query
        );

        $args[ 'tax_query' ] = $tax_query;
    }

} // end function

Обратите внимание, что я заменил каждый $args[ 'topics' ] на $request['filter']['topics']

person Marc    schedule 10.02.2017