Получите термины второго уровня пользовательской таксономии


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

Term 1
   SubTerm-1.1
   SubTerm-1.2
       SubTerm-1.2.1
Term 2
   SubTerm-2.1

Скажем, если SubTerm->parent является идентификатором термина 1, то я хочу вывести подтермы 1.1 и 1.2, но не 1.2.1.

wp_list_categories(array('depth' => 2, 'taxonomy' => 'customtax')); это не то, что я ищу, так как в нем перечислены термины с их ссылками, чего я не хочу, и нет опции фильтрации по идентификатору SubTerm->parent.

Итак, есть идеи?

Author: Adige72, 2012-07-17

2 answers

Вы можете использовать PHP array_filter для обработки результатов функции запроса таксономии, которая возвращает свои результаты, а затем отображает их. Что-то вроде:

# This returns the whole taxonomy...
$whole_tax = get_terms('customtax', array('hide_empty' => 0));
$second_level = array_filter($whole_tax, function ($t) {
  # This term has a parent, but its parent does not.
  return $t->parent != 0 && get_term($t->parent, 'customtax')->parent == 0;
});

На этом этапе вы можете отобразить $second_level для вывода в любом формате, который вы хотите.

ПРИМЕЧАНИЕ. Если это часто используется на занятой стороне, следует избегать всех этих дополнительных вызовов get_term, считывая данные из массива $whole_tax, предполагая, что в документации указано, что get_term всегда попадает в базу данных при передаче идентификатора.

 6
Author: Richard, 2012-07-18 07:45:03
$tax ='taxonomy';
        $args = array(
          'taxonomy' => $tax,
          'hide_empty' => false,
          'parent' => 0,
          );
    $toplv_term_query = new WP_Term_Query($args);
        foreach($toplv_term_query->get_terms() as $toplv_term){
             $args = array(
               'taxonomy' => $tax,
               'hide_empty' => false,
               'parent' => $toplv_term->term_id,
              );
          $secondlv_term_query = new WP_Term_Query($args);
              foreach($secondlv_term_query->get_terms() as $secondlv_term){
                   $secondlv_term->term_id;

             }
        }
 -1
Author: webjuice, 2017-02-27 14:28:56