Javascript 更新到WP 4.7后,WordPress API V2的额外参数和查询被忽略

Javascript 更新到WP 4.7后,WordPress API V2的额外参数和查询被忽略,javascript,php,wordpress,wordpress-rest-api,Javascript,Php,Wordpress,Wordpress Rest Api,我有一个网站一直在使用WordPress REST API V2插件。我使用下面的代码添加了一个额外的参数过滤器,在调用使用自定义分类主题标记的帖子时可以使用该过滤器。该站点需要能够将多个分类术语添加到查询中,并显示具有指定术语的任何帖子,但仅显示具有指定术语之一的帖子 add_action( 'rest_query_vars', 'custom_multiple_topics' ); function custom_multiple_topics( $vars ) { array_pu

我有一个网站一直在使用WordPress REST API V2插件。我使用下面的代码添加了一个额外的参数过滤器,在调用使用自定义分类主题标记的帖子时可以使用该过滤器。该站点需要能够将多个分类术语添加到查询中,并显示具有指定术语的任何帖子,但仅显示具有指定术语之一的帖子

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[主题]=审计、数据

在升级到WordPress4.7之前,这一切都非常有效。更新后,这些参数将被忽略。我不知道从哪里开始解决这个问题。网站上没有PHP或Javascript错误,只是忽略了自定义过滤器。更新后,所有帖子都将使用此查询显示,无论它们标记了什么


有人在更新时遇到过这个问题吗?

我找到了这个问题的解决方案。事实证明,在更新之后,不再使用操作rest\u query\u vars

解决办法很简单。我必须更新在rest\u post\u查询操作中触发的代码,以测试$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']