WooCommerce REST API多属性商品筛选失效问题求助
解决WooCommerce REST API多属性筛选问题
你遇到的问题是因为重复使用同名查询参数时,会被最后一个值覆盖。WooCommerce API支持用数组格式的参数来传递多组属性筛选条件,具体用法如下:
正确的API调用格式
使用attribute[]和attribute_term[]作为参数名,每个属性对应一组键值对:
GET /wp-json/wc/v3/products?attribute[]=attribute1&attribute_term[]=value1&attribute[]=attribute2&attribute_term[]=value2
这种格式下,API会将每个attribute[]与对应的attribute_term[]按顺序关联,实现同时匹配多个属性的筛选逻辑。
如果数组参数不生效的替代方案
如果你的WooCommerce版本不支持上述数组参数格式,可以通过自定义REST端点实现需求:
在WordPress主题的functions.php中添加以下代码,注册一个支持多属性筛选的自定义端点:
add_action('rest_api_init', function () { register_rest_route('custom/v1', '/filtered-products', [ 'methods' => 'GET', 'callback' => 'wc_multi_attr_filter', 'permission_callback' => function () { // 可根据需求添加权限验证,比如检查API密钥或用户权限 return current_user_can('manage_woocommerce'); } ]); }); function wc_multi_attr_filter($request) { $attrs = $request->get_param('attrs'); if (!is_array($attrs)) { return rest_ensure_response([]); } $tax_query = ['relation' => 'AND']; foreach ($attrs as $slug => $term) { // WooCommerce产品属性的分类名前缀是pa_ $taxonomy = 'pa_' . sanitize_title($slug); $tax_query[] = [ 'taxonomy' => $taxonomy, 'field' => 'slug', 'terms' => sanitize_title($term) ]; } $query = new WP_Query([ 'post_type' => 'product', 'posts_per_page' => 10, // 可按需调整每页返回数量 'tax_query' => $tax_query, 'post_status' => 'publish' ]); $products = []; foreach ($query->posts as $post) { $product = wc_get_product($post->ID); $products[] = $product->get_data(); // 返回完整产品数据,可按需筛选特定字段 } return rest_ensure_response($products); }
调用自定义端点示例
GET /wp-json/custom/v1/filtered-products?attrs[attribute1]=value1&attrs[attribute2]=value2
内容的提问来源于stack exchange,提问作者hashan_m
相关产品推荐
相关产品推荐

