コード例 #1
0
 /**
  * Return a meta query for filtering by price.
  * @return array
  */
 private function price_filter_meta_query()
 {
     if (isset($_GET['max_price']) || isset($_GET['min_price'])) {
         $meta_query = wc_get_min_max_price_meta_query($_GET);
         $meta_query['price_filter'] = true;
         return $meta_query;
     }
     return array();
 }
コード例 #2
0
 /**
  * Query args.
  *
  * @param array           $args    Request args.
  * @param WP_REST_Request $request Request data.
  * @return array
  */
 public function query_args($args, $request)
 {
     // Set post_status.
     $args['post_status'] = $request['status'];
     // Taxonomy query to filter products by type, category,
     // tag, shipping class, and attribute.
     $tax_query = array();
     // Map between taxonomy name and arg's key.
     $taxonomies = array('product_cat' => 'category', 'product_tag' => 'tag', 'product_shipping_class' => 'shipping_class');
     // Set tax_query for each passed arg.
     foreach ($taxonomies as $taxonomy => $key) {
         if (!empty($request[$key])) {
             $tax_query[] = array('taxonomy' => $taxonomy, 'field' => 'term_id', 'terms' => $request[$key]);
         }
     }
     // Filter product type by slug.
     if (!empty($request['type'])) {
         $tax_query[] = array('taxonomy' => 'product_type', 'field' => 'slug', 'terms' => $request['type']);
     }
     // Filter by attribute and term.
     if (!empty($request['attribute']) && !empty($request['attribute_term'])) {
         if (in_array($request['attribute'], wc_get_attribute_taxonomy_names(), true)) {
             $tax_query[] = array('taxonomy' => $request['attribute'], 'field' => 'term_id', 'terms' => $request['attribute_term']);
         }
     }
     if (!empty($tax_query)) {
         $args['tax_query'] = $tax_query;
     }
     // Filter featured.
     if (is_bool($request['featured'])) {
         $args['tax_query'][] = array('taxonomy' => 'product_visibility', 'field' => 'name', 'terms' => 'featured');
     }
     // Filter by sku.
     if (!empty($request['sku'])) {
         $args['meta_query'] = $this->add_meta_query($args, array('key' => '_sku', 'value' => $request['sku']));
     }
     // Filter by tax class.
     if (!empty($request['tax_class'])) {
         $args['meta_query'] = $this->add_meta_query($args, array('key' => '_tax_class', 'value' => 'standard' !== $request['tax_class'] ? $request['tax_class'] : ''));
     }
     // Price filter.
     if (!empty($request['min_price']) || !empty($request['max_price'])) {
         $args['meta_query'] = $this->add_meta_query($args, wc_get_min_max_price_meta_query($request));
     }
     // Filter product in stock or out of stock.
     if (is_bool($request['in_stock'])) {
         $args['meta_query'] = $this->add_meta_query($args, array('key' => '_stock_status', 'value' => true === $request['in_stock'] ? 'instock' : 'outofstock'));
     }
     // Filter by on sale products.
     if (is_bool($request['on_sale'])) {
         $on_sale_key = $request['on_sale'] ? 'post__in' : 'post__not_in';
         $args[$on_sale_key] += wc_get_product_ids_on_sale();
     }
     // Apply all WP_Query filters again.
     if (is_array($request['filter'])) {
         $args = array_merge($args, $request['filter']);
         unset($args['filter']);
     }
     // Force the post_type argument, since it's not a user input variable.
     if (!empty($request['sku'])) {
         $args['post_type'] = array('product', 'product_variation');
     } else {
         $args['post_type'] = $this->post_type;
     }
     return $args;
 }
コード例 #3
0
ファイル: functions.php プロジェクト: Korkey128k/woocommerce
 /**
  * Test wc_get_min_max_price_meta_query()
  *
  * @since 2.7.0
  */
 public function test_wc_get_min_max_price_meta_query()
 {
     $meta_query = wc_get_min_max_price_meta_query(array('min_price' => 10, 'max_price' => 100));
     $this->assertEquals(array('key' => '_price', 'value' => array(10, 100), 'compare' => 'BETWEEN', 'type' => 'DECIMAL'), $meta_query);
 }