WP Tax query & order by tax query not working

I have subcategories(custom taxonomy).I want to fetch all products of that category in one table then other category name it's table. To achieve this,I grouped by ordered by custom taxonomy.Also, I want to pass parent category (custom taxonomy) id to the query. But when I pass these 2 conditions at a time , no data is returned.

/* to order by taxonomy*/
function orderby_tax_clauses( $clauses, $wp_query ) {
global $wpdb;

if ( isset( $wp_query-query['orderby'] )  'product_category' == $wp_query-query['orderby'] ) {

    $clauses['join'] .= SQL
    LEFT OUTER JOIN {$wpdb-term_relationships} ON {$wpdb-posts}.ID={$wpdb-term_relationships}.object_id
    LEFT OUTER JOIN {$wpdb-term_taxonomy} USING (term_taxonomy_id)
    LEFT OUTER JOIN {$wpdb-terms} USING (term_id)
    SQL;

    $clauses['where'] .= " AND (taxonomy = 'product_category' OR taxonomy IS NULL)";
    $clauses['groupby'] = "object_id";
    $clauses['orderby']  = "GROUP_CONCAT({$wpdb-terms}.name ORDER BY name ASC) ";
    $clauses['orderby'] .= ( 'ASC' == strtoupper( $wp_query-get('order') ) ) ? 'ASC' : 'DESC';
}

return $clauses;
}

Here is my function to fetch products :

 add_shortcode('product-list','get_product_list');
 function get_product_list($atts)
 {
   extract($atts = shortcode_atts(
     array(
    'cat' = '',
   ),
   $atts
  ));

global $post;
global $wp_query;



$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
add_filter( 'posts_clauses', 'orderby_tax_clauses', 10, 2 );
$args = array(
    'post_type' = 'product',
    'posts_per_page' = 50,
            'orderby'        = 'product_category',
            'order'       = 'ASC',
    'paged' = $paged
);


if($atts['cat'] != "") { 
    $args['tax_query' ][] =array(
            'taxonomy' = 'product_category',
            'field' = 'id',
            'terms' = $atts['cat'],
        );
}

$wp_query = new WP_Query( $args );
echo $wp_query-request;
//echo '********'.$wp_query-last_query; 
remove_filter( 'posts_clauses', 'orderby_tax_clauses', 10, 2 ); 

if ( $wp_query-have_posts() ) :
/* my code*/
endif;
}

I debugged found this query :

SELECT SQL_CALC_FOUND_ROWS wp_posts.ID
FROM wp_posts
LEFT JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id)
LEFT OUTER JOIN wp_term_relationships ON wp_posts.ID=wp_term_relationships.object_id
LEFT OUTER JOIN wp_term_taxonomy USING (term_taxonomy_id)
LEFT OUTER JOIN wp_terms USING (term_id)
WHERE 1=1
  AND (wp_term_relationships.term_taxonomy_id IN (65))
  AND wp_posts.post_type = 'product'
  AND (wp_posts.post_status = 'publish'
       OR wp_posts.post_status = 'acf-disabled')
  AND (taxonomy = 'product_category'
       OR taxonomy IS NULL)
GROUP BY object_id
ORDER BY GROUP_CONCAT(wp_terms.name
                      ORDER BY name ASC) ASC
LIMIT 0,
      50

Topic multi-taxonomy-query custom-taxonomy sort Wordpress

Category Web


Here's an example of working tax_query.

The problem I've run into with tax_query is forgetting to nest the array (i.e. 'tax_query' is array(array(...)). If you don't do that, it does not work.

$args = array(
    'post_type' => $post_type,
    'posts_per_page' => -1,  //show all posts
    'tax_query' => array(
         array(
            'taxonomy' => $taxonomy,
             //'field' => 'slug',
             //'terms' => $term->slug,
             'field' => 'term_id',
             'terms' => array([your values]),
          )
     )
 );

About

Geeks Mental is a community that publishes articles and tutorials about Web, Android, Data Science, new techniques and Linux security.