'product', 'posts_per_page' => $post_per_page, 'post_status' => 'publish', 'paged' => $paged, 'orderby' => $orderby ); if ( isset( $args['orderby'] ) ) { if ( 'price' == $args['orderby'] ) { $args = array_merge( $args, array( 'meta_key' => '_price', 'orderby' => 'meta_value_num' ) ); } if ( 'featured' == $args['orderby'] ) { $args = array_merge( $args, array( 'meta_key' => '_featured', 'orderby' => 'meta_value' ) ); } if ( 'sku' == $args['orderby'] ) { $args = array_merge( $args, array( 'meta_key' => '_sku', 'orderby' => 'meta_value' ) ); } } switch ($type) { case 'deals': $args['meta_query'] = array(); $args['meta_query'][] = array( 'key' => '_sale_price_dates_to', 'value' => time(), 'compare' => '>'); $args['post__in'] = woocommerce_get_product_ids_on_sale(); break; case 'best_selling': $args['meta_key']='total_sales'; $args['orderby']='meta_value_num'; $args['ignore_sticky_posts'] = 1; $args['meta_query'] = array(); $args['meta_query'][] = $woocommerce->query->stock_status_meta_query(); $args['meta_query'][] = $woocommerce->query->visibility_meta_query(); break; case 'featured_product': $args['ignore_sticky_posts']=1; $args['meta_query'] = array(); $args['meta_query'][] = $woocommerce->query->stock_status_meta_query(); $args['meta_query'][] = array( 'key' => '_featured', 'value' => 'yes' ); $query_args['meta_query'][] = $woocommerce->query->visibility_meta_query(); break; case 'top_rate': add_filter( 'posts_clauses', array( $woocommerce->query, 'order_by_rating_post_clauses' ) ); $args['meta_query'] = array(); $args['meta_query'][] = $woocommerce->query->stock_status_meta_query(); $args['meta_query'][] = $woocommerce->query->visibility_meta_query(); break; case 'recent_product': $args['meta_query'] = array(); $args['meta_query'][] = $woocommerce->query->stock_status_meta_query(); break; case 'on_sale': $args['meta_query'] = array(); $args['meta_query'][] = $woocommerce->query->stock_status_meta_query(); $args['meta_query'][] = $woocommerce->query->visibility_meta_query(); $args['meta_query'][] = array( 'relation' => 'OR', array( // Simple products type 'key' => '_sale_price', 'value' => 0, 'compare' => '>', 'type' => 'numeric' ), array( // Variable products type 'key' => '_min_variation_sale_price', 'value' => 0, 'compare' => '>', 'type' => 'numeric' ) ); break; case 'recent_review': if($post_per_page == -1) $_limit = 4; else $_limit = $post_per_page; global $wpdb; $query = "SELECT c.comment_post_ID FROM {$wpdb->prefix}posts p, {$wpdb->prefix}comments c WHERE p.ID = c.comment_post_ID AND c.comment_approved > 0 AND p.post_type = 'product' AND p.post_status = 'publish' AND p.comment_count > 0 ORDER BY c.comment_date ASC"; $results = $wpdb->get_results($query, OBJECT); $_pids = array(); foreach ($results as $re) { if(!in_array($re->comment_post_ID, $_pids)) $_pids[] = $re->comment_post_ID; if(count($_pids) == $_limit) break; } $args['meta_query'] = array(); $args['meta_query'][] = $woocommerce->query->stock_status_meta_query(); $args['meta_query'][] = $woocommerce->query->visibility_meta_query(); $args['post__in'] = $_pids; break; } if($cat!=''){ $args['product_cat']= $cat; } return new WP_Query($args); } function basetheme_fnc_get_review_counting(){ global $post; $output = array(); for($i=1; $i <= 5; $i++){ $args = array( 'post_id' => ( $post->ID ), 'meta_query' => array( array( 'key' => 'rating', 'value' => $i ) ), 'count' => true ); $output[$i] = get_comments( $args ); } return $output; } function basetheme_fnc_price( $price ){ return $price; }