使Woo Rest Api支持使用filter字段按自定义taxonomy过滤产品

论坛首页 论坛 经验分享 使Woo Rest Api支持使用filter字段按自定义taxonomy过滤产品

正在查看 0 条回复
  • 作者
    帖子
    • #20390
      孙锡源
      管理员
        @ibadboy
        楼主
        坏蛋的博客
        ibadboy.net

        Woo Rest Api v1中是支持这个字段的,但自v2版本后移除了。

        另外从老外论坛上看到可以直接在Api后面拼上:taxonomy_name=term_id的方式来查询,但试了下似乎不可行行。

        后来逛到一个GitHub仓库:https://github.com/WP-API/rest-filter,其中分享了为WP的Rest Api增加filter字段的代码,但这不支持Woo,后来索性在这个代码的基础上简单适配了下Woo,贴在下面:

        add_filter( 'woocommerce_rest_product_object_query', function ( $args, $request ) {
               if ( empty( $request['filter'] ) || ! is_array( $request['filter'] ) ) {
                      return $args;
               }
        
               $filter = $request['filter'];
        
               if ( isset( $filter['posts_per_page'] ) && ( (int) $filter['posts_per_page'] >= 1 && (int) $filter['posts_per_page'] <= 100 ) ) {
                      $args['posts_per_page'] = $filter['posts_per_page'];
               }
        
               global $wp;
               $vars = apply_filters( 'rest_query_vars', $wp->public_query_vars );
        
               $vars = array_unique( array_merge( $vars, array( 'meta_query', 'meta_key', 'meta_value', 'meta_compare' ) ) );
        
               foreach ( $vars as $var ) {
                      if ( isset( $filter[ $var ] ) ) {
                             $args[ $var ] = $filter[ $var ];
                      }
               }
               return $args;
        }, 10, 2 );

         

    正在查看 0 条回复
    • 哎呀,回复话题必需登录。