Using the_widget Multiple Times

I’ve written custom functions for queries.

<?php
/**
 * Column Content (min:2 - max:3 column)
 *
 * @since  1.0.0
 * @return void 
 */

if ( ! defined( 'ABSPATH' ) ) { exit; }

add_action( 'widgets_init', function(){
register_widget( 'Hw_Column_Widget' );
});

class Hw_Column_Widget extends WP_Widget {

/**
 * Sets up the widgets name etc
 */
public function __construct() {
    $widget_ops = array(
        'classname' => 'hw_column_widget',
        'description' => 'Columns widget',
    );

    parent::__construct( 'hw_column_widget', __( 'Home Columns', 'theme' ), $widget_ops );
}

/**
 * Outputs the content of the widget
 *
 * @param array $args
 * @param array $instance
 */
public function widget( $args, $instance ) {
    // outputs the content of the widget
    echo $args['before_widget'];

    //the_widget($widget, $instance, $args);
    if ( ! empty( $instance['title_one'] ) ) {
        $t1 = $instance['title_one'];
    }

    if ( ! empty( $instance['title_two'] ) ) {
        $t2 = $instance['title_two'];
    }

    if ( ! empty( $instance['title_three'] ) ) {
        $t3 = $instance['title_three'];
    }

    $column_first = $instance['column_first'];
    $column_second = $instance['column_second'];
    $column_third = $instance['column_third'];

    echo '<div class="woocommerce columns-3">';

        switch ($column_first) {
            case "recent":
                $this->recent($t1);
                break;
            case "featured":
                $this->featured($t1);
                break;
            case "popular":
                $this->popular($t1);
                break;
            case "onsale":
                $this->onsale($t1);
                break;                  
            case "best":
                $this->best($t1);
                break;
        }

        switch ($column_second) {
            case "recent":
                $this->recent($t2);
                break;
            case "featured":
                $this->featured($t2);
                break;
            case "popular":
                $this->popular($t2);
                break;
            case "onsale":
                $this->onsale($t2);
                break;                  
            case "best":
                $this->best($t2);
                break;
        }

        switch ($column_third) {
            case "recent":
                $this->recent($t3);
                break;
            case "featured":
                $this->featured($t3);
                break;
            case "popular":
                $this->popular($t3);
                break;
            case "onsale":
                $this->onsale($t3);
                break;                  
            case "best":
                $this->best($t3);
                break;
        }           

    echo '</div>';

    echo $args['after_widget'];
}


/**
 * Outputs the options form on admin
 *
 * @param array $instance The widget options
 */
public function form( $instance ) {
    $title= __('Home Columns', 'prostore');

    if(isset($instance['title_one'])) { $title_one = esc_attr($instance['title_one']); }
    if(isset($instance['title_two'])) { $title_two = esc_attr($instance['title_two']); }        
    if(isset($instance['title_three'])) { $title_three = esc_attr($instance['title_three']); }

    if(isset($instance['column_first'])) { $column_first = esc_attr($instance['column_first']); }
    if(isset($instance['column_second'])) { $column_second = esc_attr($instance['column_second']); }
    if(isset($instance['column_third'])) { $column_third = esc_attr($instance['column_third']); }
    ?>
    <h3>1. Kolon</h3>
    <p>
        <label for="<?php echo $this->get_field_name( 'title_one' ); ?>"><?php _e( 'Title:', 'prostore' ); ?></label>
        <input class="widefat" id="<?php echo $this->get_field_id( 'title_one' ); ?>" name="<?php echo $this->get_field_name( 'title_one' ); ?>" type="text" value="<?php echo esc_attr( $title_one ); ?>" />
    </p>        
    <p>
        <label for="<?php echo $this->get_field_id('column_first'); ?>">İçerik: 
            <select class="widefat" id="<?php echo $this->get_field_id('column_first'); ?>" name="<?php echo $this->get_field_name('column_first'); ?>">
                <option value="recent"<?php echo ($column_first=='recent')?'selected':''; ?>><?php _e('Son Eklenen Ürünler','prostore'); ?></option>
                <option value="featured"<?php echo ($column_first=='featured')?'selected':''; ?>><?php _e('Öne Çıkan Ürünler','prostore'); ?></option>
                <option value="popular"<?php echo ($column_first=='popular')?'selected':''; ?>><?php _e('Popüler Ürünler','prostore'); ?></option> 
                <option value="onsale"<?php echo ($column_first=='onsale')?'selected':''; ?>><?php _e('İndirimli Ürünler','prostore'); ?></option> 
                <option value="best"<?php echo ($column_first=='best')?'selected':''; ?>><?php _e('Çok Satanlar','prostore'); ?></option> 
            </select>                
        </label>
    </p>
    <h3>2. Kolon</h3>
    <p>
        <label for="<?php echo $this->get_field_name( 'title_two' ); ?>"><?php _e( 'Title:', 'prostore' ); ?></label>
        <input class="widefat" id="<?php echo $this->get_field_id( 'title_two' ); ?>" name="<?php echo $this->get_field_name( 'title_two' ); ?>" type="text" value="<?php echo esc_attr( $title_two ); ?>" />
    </p>        
    <p>
        <label for="<?php echo $this->get_field_id('column_second'); ?>">İçerik: 
            <select class="widefat" id="<?php echo $this->get_field_id('column_second'); ?>" name="<?php echo $this->get_field_name('column_second'); ?>">
                <option value="recent"<?php echo ($column_second=='recent')?'selected':''; ?>><?php _e('Son Eklenen Ürünler','prostore'); ?></option>
                <option value="featured"<?php echo ($column_second=='featured')?'selected':''; ?>><?php _e('Öne Çıkan Ürünler','prostore'); ?></option>
                <option value="popular"<?php echo ($column_second=='popular')?'selected':''; ?>><?php _e('Popüler Ürünler','prostore'); ?></option> 
                <option value="onsale"<?php echo ($column_second=='onsale')?'selected':''; ?>><?php _e('İndirimli Ürünler','prostore'); ?></option> 
                <option value="best"<?php echo ($column_second=='best')?'selected':''; ?>><?php _e('Çok Satanlar','prostore'); ?></option> 
            </select>                
        </label>
    </p>        
    <h3>3. Kolon</h3>
    <p>
        <label for="<?php echo $this->get_field_name( 'title_three' ); ?>"><?php _e( 'Title:', 'prostore' ); ?></label>
        <input class="widefat" id="<?php echo $this->get_field_id( 'title_three' ); ?>" name="<?php echo $this->get_field_name( 'title_three' ); ?>" type="text" value="<?php echo esc_attr( $title_three ); ?>" />
    </p>        
    <p>
        <label for="<?php echo $this->get_field_id('column_third'); ?>">İçerik: 
            <select class="widefat" id="<?php echo $this->get_field_id('column_third'); ?>" name="<?php echo $this->get_field_name('column_third'); ?>">
                <option value="recent"<?php echo ($column_third=='recent')?'selected':''; ?>><?php _e('Son Eklenen Ürünler','prostore'); ?></option>
                <option value="featured"<?php echo ($column_third=='featured')?'selected':''; ?>><?php _e('Öne Çıkan Ürünler','prostore'); ?></option>
                <option value="popular"<?php echo ($column_third=='popular')?'selected':''; ?>><?php _e('Popüler Ürünler','prostore'); ?></option> 
                <option value="onsale"<?php echo ($column_third=='onsale')?'selected':''; ?>><?php _e('İndirimli Ürünler','prostore'); ?></option> 
                <option value="best"<?php echo ($column_third=='best')?'selected':''; ?>><?php _e('Çok Satanlar','prostore'); ?></option> 
            </select>                
        </label>
    </p>        
<?php
}


/**
 * Processing widget options on save
 *
 * @param array $new_instance The new options
 * @param array $old_instance The previous options
 */
public function update( $new_instance, $old_instance ) {
    // processes widget options to be saved
    foreach( $new_instance as $key => $value )
    {
        $updated_instance[$key] = sanitize_text_field($value);
    }

    return $updated_instance;
}

/**
 * Recent Products
 *
 */ 
public function recent($title="") {

    echo '<div class="widget woocommerce widget_products">';
    echo '<ul class="product_list_widget">';
    echo '<h2 class="widgettitle">'.$title.'</h2>';

    $args = array(
        'post_type'         =>  'product',
        'status'            =>  'publish',
        'no_found_rows'     =>  1,
        'posts_per_page'    =>  10,
        'orderby'           =>  'date',
        'order'             =>  'DESC'
    );

    $loop = new WP_Query( $args );
    while ( $loop->have_posts() ) : $loop->the_post(); global $product;

    echo '<li>';
    echo '<a href="'.esc_url( get_permalink( $product->id ) ).'" title="'.esc_attr( $product->get_title() ).'">';
    echo $product->get_image();
    echo '<span class="product-title">'.$product->get_title().'</span>';
    echo '</a>';
    echo $product->get_price_html();
    echo '</li>';

    endwhile;
    wp_reset_query(); 
    echo '</ul>';
    echo '</div>';
}

/**
 * Featured Products
 *
 */     
public function featured($title="") {

    echo '<div class="widget woocommerce widget_products">';
    echo '<ul class="product_list_widget">';
    echo '<h2 class="widgettitle">'.$title.'</h2>';

    $meta_query   = WC()->query->get_meta_query();
    $meta_query[] = array(
        'key'   => '_featured',
        'value' => 'yes'
    );

    $args = array(
        'post_type'         =>  'product',
        'status'            =>  'publish',
        'no_found_rows'     =>  1,
        'posts_per_page'    =>  10,
        'orderby'           =>  'date',
        'order'             =>  'DESC',
        'meta_query'        =>  $meta_query
    );

    $loop = new WP_Query( $args );
    while ( $loop->have_posts() ) : $loop->the_post(); global $product;

    echo '<li>';
    echo '<a href="'.esc_url( get_permalink( $product->id ) ).'" title="'.esc_attr( $product->get_title() ).'">';
    echo $product->get_image();
    echo '<span class="product-title">'.$product->get_title().'</span>';
    echo '</a>';
    echo $product->get_price_html();
    echo '</li>';

    endwhile;
    wp_reset_query(); 
    echo '</ul>';
    echo '</div>';
}

/**
 * Popular Products
 *
 */     
public function popular($title="") {

    echo '<div class="widget woocommerce widget_products">';
    echo '<ul class="product_list_widget">';
    echo '<h2 class="widgettitle">'.$title.'</h2>';

    add_filter( 'posts_clauses',  array( WC()->query, 'order_by_rating_post_clauses' ) );

    $args = array(
        'post_type'         =>  'product',
        'status'            =>  'publish',
        'no_found_rows'     =>  1,
        'posts_per_page'    =>  10,
        'orderby'           =>  'date',
        'order'             =>  'DESC'
    );

    $args['meta_query'] = WC()->query->get_meta_query();

    $loop = new WP_Query( $args );
    while ( $loop->have_posts() ) : $loop->the_post(); global $product;

    echo '<li>';
    echo '<a href="'.esc_url( get_permalink( $product->id ) ).'" title="'.esc_attr( $product->get_title() ).'">';
    echo $product->get_image();
    echo '<span class="product-title">'.$product->get_title().'</span>';
    echo '</a>';
    echo $product->get_price_html();
    echo '</li>';

    endwhile;
    remove_filter( 'posts_clauses', array( WC()->query, 'order_by_rating_post_clauses' ) );
    wp_reset_query(); 
    echo '</ul>';
    echo '</div>';
}   

/**
 * On Sale Products
 *
 */     
public function onsale($title="") {

    echo '<div class="widget woocommerce widget_products">';
    echo '<ul class="product_list_widget">';
    echo '<h2 class="widgettitle">'.$title.'</h2>';

    $args = array(
        'posts_per_page'    => 10,
        'no_found_rows'     => 1,
        'post_status'       => 'publish',
        'post_type'         => 'product',
        'meta_query'        => WC()->query->get_meta_query(),
        'post__in'          => array_merge( array( 0 ), wc_get_product_ids_on_sale() )
    );

    $loop = new WP_Query( $args );
    while ( $loop->have_posts() ) : $loop->the_post(); global $product;

    echo '<li>';
    echo '<a href="'.esc_url( get_permalink( $product->id ) ).'" title="'.esc_attr( $product->get_title() ).'">';
    echo $product->get_image();
    echo '<span class="product-title">'.$product->get_title().'</span>';
    echo '</a>';
    echo $product->get_price_html();
    echo '</li>';

    endwhile;
    wp_reset_query(); 
    echo '</ul>';
    echo '</div>';
}

/**
 * Best Selling Products
 *
 */     
public function best($title="") {

    echo '<div class="widget woocommerce widget_products">';
    echo '<ul class="product_list_widget">';
    echo '<h2 class="widgettitle">'.$title.'</h2>';

    $args = array(
        'post_type'         =>  'product',
        'status'            =>  'publish',
        'no_found_rows'     =>  1,
        'posts_per_page'    =>  10,
        'orderby'           =>  'meta_value_num',
        'meta_key'          =>  'total_sales',
        'order'             =>  'DESC'
    );

    $loop = new WP_Query( $args );
    while ( $loop->have_posts() ) : $loop->the_post(); global $product;

    echo '<li>';
    echo '<a href="'.esc_url( get_permalink( $product->id ) ).'" title="'.esc_attr( $product->get_title() ).'">';
    echo $product->get_image();
    echo '<span class="product-title">'.$product->get_title().'</span>';
    echo '</a>';
    echo $product->get_price_html();
    echo '</li>';

    endwhile;
    wp_reset_query(); 
    echo '</ul>';
    echo '</div>';
}   
}