/**
  * widget function.
  *
  * @see WP_Widget
  * @access public
  * @param array $args
  * @param array $instance
  * @return void
  */
 public function widget($args, $instance)
 {
     if ($this->get_cached_widget($args)) {
         return;
     }
     ob_start();
     extract($args);
     $title = apply_filters('widget_title', $instance['title'], $instance, $this->id_base);
     $number = absint($instance['number']);
     $show = sanitize_title($instance['show']);
     $orderby = sanitize_title($instance['orderby']);
     $order = sanitize_title($instance['order']);
     $show_rating = false;
     if ($show == 'top_rate') {
         $show_rating = true;
     }
     $query_args = pgl_woocommerce_query_args($show, $number);
     $query_args['order'] = $order == 'asc' ? 'asc' : 'desc';
     if (empty($instance['show_hidden'])) {
         $query_args['meta_query'][] = WC()->query->visibility_meta_query();
         $query_args['post_parent'] = 0;
     }
     if (!empty($instance['hide_free'])) {
         $query_args['meta_query'][] = array('key' => '_price', 'value' => 0, 'compare' => '>', 'type' => 'DECIMAL');
     }
     $query_args['meta_query'][] = WC()->query->stock_status_meta_query();
     $query_args['meta_query'] = array_filter($query_args['meta_query']);
     switch ($orderby) {
         case 'price':
             $query_args['meta_key'] = '_price';
             $query_args['orderby'] = 'meta_value_num';
             break;
         case 'rand':
             $query_args['orderby'] = 'rand';
             break;
         case 'sales':
             $query_args['meta_key'] = 'total_sales';
             $query_args['orderby'] = 'meta_value_num';
             break;
         default:
             $query_args['orderby'] = 'date';
     }
     $r = new WP_Query($query_args);
     if ($r->have_posts()) {
         echo $before_widget;
         if ($title) {
             echo $before_title . $title . $after_title;
         }
         echo '<div class="product_list_widget">';
         while ($r->have_posts()) {
             $r->the_post();
             wc_get_template('content-widget-product.php', array('show_rating' => $show_rating));
         }
         echo '</div>';
         echo $after_widget;
     }
     wp_reset_postdata();
     $content = ob_get_clean();
     echo $content;
     $this->cache_widget($args, $content);
 }
function pgl_woocommerce_query($type, $post_per_page = -1, $cat = '')
{
    $args = pgl_woocommerce_query_args($type, $post_per_page, $cat);
    return new WP_Query($args);
}