WP Налоговый запрос и порядок по налоговым запросам не работают

У меня есть подкатегории (пользовательская таксономия). Я хочу получить все продукты этой категории в одной таблице, а затем другую категорию и ее таблицу. Чтобы достичь этого, я сгруппировал его и заказал пользовательскую таксономию. Также я хочу передать идентификатор родительской категории (пользовательской таксономии) в запрос. Но когда я передаю эти 2 условия за раз, данные не возвращаются.

/* 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; } 

Вот моя функция для извлечения продуктов:

  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; } 

Я отладил & нашел этот запрос:

 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 

Вот пример работы tax_query.

Проблема, с которой я столкнулся с tax_query, забывает вложить массив (т. Е. «Tax_query» – это массив (array (…)). Если вы этого не сделаете, это не сработает.

 $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]), ) ) );