我正在开发移动应用程序来连接iOS和Android中的WooCommerce wordpress V3 rest API。
我从Rest API获取产品列表
“wp json/wc/v3/products”
我能够过滤产品使用
“wp json/wc/v3/productscategory=241
并使用
"wp-json/wc/v3/产品?属性=pa_flavor
我需要在RESTAPI中过滤具有多个属性的产品(如pa_味道、pa_大小、pa_颜色等)。你怎么能这么做?
按多个属性为过滤器产品创建自定义REST API
// Create Custom REST API for Filter
add_action('rest_api_init', 'wp_rest_filterproducts_endpoints');
function wp_rest_filterproducts_endpoints($request) {
register_rest_route('wp/v3', 'filter/products', array(
'methods' => 'GET',
'callback' => 'wp_rest_filterproducts_endpoint_handler',
));
}
function wp_rest_filterproducts_endpoint_handler($request = null) {
$output = array();
$params = $request->get_params();
$category = $params['category'];
$filters = $params['filter'];
$per_page = $params['per_page'];
$offset = $params['offset'];
$order = $params['order'];
$orderby = $params['orderby'];
// Use default arguments.
$args = [
'post_type' => 'product',
'posts_per_page' => 10,
'post_status' => 'publish',
'paged' => 1,
];
// Posts per page.
if ( ! empty( $per_page ) ) {
$args['posts_per_page'] = $per_page;
}
// Pagination, starts from 1.
if ( ! empty( $offset ) ) {
$args['paged'] = $offset;
}
// Order condition. ASC/DESC.
if ( ! empty( $order ) ) {
$args['order'] = $order;
}
// Orderby condition. Name/Price.
if ( ! empty( $orderby ) ) {
if ( $orderby === 'price' ) {
$args['orderby'] = 'meta_value_num';
} else {
$args['orderby'] = $orderby;
}
}
// If filter buy category or attributes.
if ( ! empty( $category ) || ! empty( $filters ) ) {
$args['tax_query']['relation'] = 'AND';
// Category filter.
if ( ! empty( $category ) ) {
$args['tax_query'][] = [
'taxonomy' => 'product_cat',
'field' => 'slug',
'terms' => [ $category ],
];
}
// Attributes filter.
if ( ! empty( $filters ) ) {
foreach ( $filters as $filter_key => $filter_value ) {
if ( $filter_key === 'min_price' || $filter_key === 'max_price' ) {
continue;
}
$args['tax_query'][] = [
'taxonomy' => $filter_key,
'field' => 'term_id',
'terms' => \explode( ',', $filter_value ),
];
}
}
// Min / Max price filter.
if ( isset( $filters['min_price'] ) || isset( $filters['max_price'] ) ) {
$price_request = [];
if ( isset( $filters['min_price'] ) ) {
$price_request['min_price'] = $filters['min_price'];
}
if ( isset( $filters['max_price'] ) ) {
$price_request['max_price'] = $filters['max_price'];
}
$args['meta_query'][] = \wc_get_min_max_price_meta_query( $price_request );
}
}
$the_query = new \WP_Query( $args );
if ( ! $the_query->have_posts() ) {
return $output;
}
while ( $the_query->have_posts() ) {
$the_query->the_post();
$product = wc_get_product( get_the_ID() );
// Product Properties
$wcproduct['id'] = $product->get_id();
$wcproduct['name'] = $product->get_name();
$output[] = $wcproduct;
}
wp_reset_postdata();
return new WP_REST_Response($output, 123);
}
请求:
/wp-json/wp/v3/filter/product/?类别=kurtis
价格:
/wp-json/wp/v3/filter/product/?过滤器[min_price]=500
我认为这里的问题不是怎么做,而是为什么这样做?哪种方法对你来说是最好的方法?
你描述的基本上是类别,如果是这样的话,你可以。
https://woocommerce.github.io/woocommerce-rest-api-docs/#retrieve-a-产品类别
请求:
卷曲https://example.com/wp-json/wc/v3/products/categories/9
/wp json/wc/v3/产品/类别/
现在如果你想通过属性拉
您可以检索它们自己使用的属性
/wp-json/wc/v3/products/attributes
我想请您阅读Woocoomerece Api上的文档,老实说,它非常广泛。
如果你想完全控制这一切。我建议设置类别或标签,然后在所述类别或标签下添加产品,然后拉这些标签/类别
现在你提到你为IOS和Android做这个,但是你用的是什么框架。因此,我可以为您提供一些实际的代码示例。