我正在开发移动应用程序,以连接iOS和Android中的WooCommerce wordpress V3 rest API。
我正在从Rest API获取产品列表
“ wp-json / wc / v3 / products”
我可以使用以下产品过滤产品
“ wp-json / wc / v3 / productscategory = 241&attribute = pa_flavor&attribute_term = 301”
并使用
过滤多个属性项“ wp-json / wc / v3 / products?attribute = pa_flavor&attribute_term = 301,302,305”。
我需要在rest API中过滤具有多个属性(例如pa_flavor,pa_size,pa_color等)的产品。该怎么办?
答案 0 :(得分:0)
我认为这里的问题不是如何,但是为什么要这样做呢?哪种方法最适合您?
您的描述基本上是类别,因此,可以的话。
https://woocommerce.github.io/woocommerce-rest-api-docs/#retrieve-a-product-category
请求:
卷曲https://example.com/wp-json/wc/v3/products/categories/9
/ wp-json / wc / v3 / products / categories /
现在,如果要通过属性提取
您可以使用
检索它们自己的属性/ wp-json / wc / v3 / products / attributes
我想请您阅读Wooooomerece Api上的文档。说实话,范围很广。
如果要对此进行完全控制。我建议设置类别或标签,然后在所述类别或标签下添加产品,然后拉出这些标签/类别
现在您提到您是为IOS和Android制作的,但是您使用的是什么框架。 因此,我可以为您提供一些实际的代码示例。
答案 1 :(得分:0)
创建自定义 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/?category=kurtis&filter[pa_color]=XX,X,XXX
价格:
/wp-json/wp/v3/filter/product/?filter[min_price]=500&filter[max_price]=1000&filter[pa_color]=XX