Поддержка Проблемы и решения get_posts и вложенные термы

  • Приветствую вас, братия.
    Подскажите где баг — в ядре или у меня в голове?
    get_posts не видит записи при определенном раскладе.

    Есть нехитрый код, который выводит меню товаров из заданных категорий.

    $items = get_posts(
     array(
      'post_type' => 'product',
      'nopaging' => true,
      'orderby' => 'menu_order title',
      'order' => 'DESC',
      'tax_query' => array(
        array(
         'taxonomy' => 'product_cat',
         'field' => 'id',
         'terms' => $cats,
         'operator' => 'AND',
         'include_children' => true,
        ),
       ),
     )
    );
    echo '<ul>';
    foreach( $items as $item ):
    	$li = '<li class="menu-item product product-' . $item->ID . '%s"><a href="' . get_the_permalink( $item->ID ) . '">' . apply_filters( 'the_title', $item->post_title ) . '</a></li>';
    	$current = $post->ID == $item->ID ? ' current-menu-item' : '' ;
    	echo sprintf( $li, $current );
    endforeach;
    echo '</ul>';

    Всё работает отлично до тех пор, пока любая из переданных в массиве $cats категорий не станет родительской — тогда нет ни единого поста. И совершенно не важно какое отношение имеет дочерняя категория к отобранным постам (то есть к тем, которые должны быть отобраны функцией get_posts).

    Прошу помощи. Спасибо

Просмотр 3 ответов — с 1 по 3 (всего 3)
  • Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Всё работает отлично до тех пор, пока любая из переданных в массиве $cats категорий не станет родительской — тогда нет ни единого поста.

    Данный запрос выводит только те записи, которым присвоены одновременно все указанные категории (и родительская и дочерняя).

    Если убрать 'operator' => 'AND', то будут выводиться записи, которые есть хотя бы в одной из категорий.

    Если убрать ‘operator’ => ‘AND’, то будут выводиться записи, которые есть хотя бы в одной из категорий.

    Что же тогда получается? Есть категория, которой может принадлежать запись. Она родительская, и эта же запись принадлежит одной из дочерних. (Скажем, родительская VolksWagen, дочерние Polo, Caddy, Amarok). Плюс есть другие категории (не родительские), одной из которых тоже может принадлежать эта запись (например Запчасти, Сервис, Документация). И мне необходимо запросить все записи из VolksWagen (без корреляции по моделям) и Сервиса. Без оператора AND он мне выдаст все фольксвагены и все сервисы, но мне нужны только записи, пересекающиеся в этих категориях.
    Какая-то странная проблема. Есть мысли?

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Самый простой вариант — убедиться, что записям в дочерних категориях (Polo, Caddy, Amarok) присвоена также и родительская (VolksWagen).

Просмотр 3 ответов — с 1 по 3 (всего 3)
  • Тема «get_posts и вложенные термы» закрыта для новых ответов.