public function product_query($q)
{
// Ordering query vars
$ordering = $this->get_catalog_ordering_args();
$q->set('orderby', $ordering['orderby']);
$q->set('order', $ordering['order']);
if (isset($ordering['meta_key'])) {
$q->set('meta_key', $ordering['meta_key']);
}
// Query vars that affect posts shown
$q->set('meta_query', $this->get_meta_query($q->get('meta_query')));
$q->set('tax_query', $this->get_tax_query($q->get('tax_query')));
$q->set('posts_per_page', $q->get('posts_per_page') ? $q->get('posts_per_page') : apply_filters('loop_shop_per_page', get_option('posts_per_page')));
$q->set('wc_query', 'product_query');
$q->set('post__in', array_unique((array) apply_filters('loop_shop_post_in', array())));
do_action('woocommerce_product_query', $q, $this);
}