Запрос Пользовательского Порядка Типов Записей По Полю Таксономии


Это сводит меня с ума. Я знаю, что об этом спрашивали несколько раз, но я не могу этого понять. Я пытаюсь отобразить список продуктов WooCommerce, которые являются пользовательским типом "продукта". Я хочу отсортировать его по таксономии "product_cat".

В следующем коде внутренний цикл while (запрос) - должен-отображать только продукты для каждого product_cat, но вместо этого он отображает - все-продукты.

Почему запрос не фильтрует каждый продукт_кат?

// loop through the categories
foreach ($cats as $cat) {
  $cat_id = $cat->term_id;
        $cat_slug = $cat->slug;
  // Make a header for the category
  echo "<h2>".$cat->slug.' '. $cat_id . "</h2>";
  // create a custom wordpress query

      $args = array(
          'post_type' => 'product',
            'posts_per_page' => -1,
            array(
                'taxonomy' => 'product_cat',
                'terms'    => $cat_id,
                'field'    => 'term_id',                    
            ),
        );
    $query = new WP_Query( $args );

        if ( $query->have_posts() ) {
            echo '<ul>';
            while ( $query->have_posts() ) {
                $query->the_post();
            $p = get_the_ID();
                echo '<li>' . get_the_title() . '</li>';
            }
            echo '</ul>';
            /* Restore original Post Data */
            wp_reset_postdata();
        } else {
            // no posts found
                echo('no posts!');  
    }
Author: jchwebdev, 2018-03-27

1 answers

Вам не хватает ключа tax_query, и он должен быть вложенным массивом:

$args = array(
    'post_type' => 'product',
    'posts_per_page' => -1,
    'tax_query' => array(
        array(
            'taxonomy' => 'product_cat',
            'terms' => $cat_id,
            'field' => 'term_id',
        ),
    ),
);

Проверьте документацию

 3
Author: TheDeadMedic, 2018-03-27 18:17:15