Многоуровневые категории не показывают иерархию третьего уровня в таксономии WordPress.

У меня есть 3 уровня категорий, категорий, подкатегорий и подкатегорий для пользовательского типа сообщения. я пытаюсь показать эти категории в раскрывающемся списке, используя CMB2, Мой код показывает только 2 уровня категорий и отсутствует третий уровень.

Category 1
-- child category 1
-- child category 2
-- addon category 1
-- addon category 2
-- child category 3
-- child category 4
-- addon category 1
-- addon category 2

Category 2
-- child category 1
-- child category 2
-- addon category 1
-- addon category 2
-- child category 3
-- child category 4
-- addon category 1
-- addon category 2

и я использую CMB2 чтобы получить эти категории в select2 с опцией множественного выбора.

и запишите следующий код:

function gp_get_cmb_options_array_tax( $taxonomy, $args = array() ) {

if ( empty( $taxonomy ) ) { return; }

$defaults = array(
'hide_empty' => 0,
);

$args = wp_parse_args( $args, $defaults );
$terms = get_terms( $taxonomy, $args );

/**
* https://developer.wordpress.org/reference/functions/_get_term_hierarchy/
*/
$hierarchy = _get_term_hierarchy( $taxonomy );

$term_list = array();
foreach ( $terms as $term ) {

if( $term->parent ) {
continue;
}

$term_list[ $term->term_id ] = $term->name;

if( isset( $hierarchy[ $term->term_id ] ) ) {

foreach ( $hierarchy[ $term->term_id ] as $child ) {

$child = get_term( $child, $taxonomy );
$term_list[ $child->term_id ] = $term->name . ' > ' . $child->name;

}

}

}

return $term_list;

}

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

и выпадающий показывает как:

Category 1
Category 1 > child category 1
Category 1 > child category 2
Category 1 > child category 3
Category 1 > child category 4

Category 2
Category 2 > child category 1
Category 2 > child category 2
Category 2 > child category 3
Category 2 > child category 4

Хотя должно показывать как

Category 1
Category 1 > child category 1
Category 1 > child category 2
Category 1 > child category 2 > addon category 1
Category 1 > child category 2 > addon category 2
Category 1 > child category 3
Category 1 > child category 4

4

Решение

Вам просто нужно сделать петлю на один уровень глубже:

function gp_get_cmb_options_array_tax( $taxonomy, $args = array() ) {

if ( empty( $taxonomy ) ) { return; }

$defaults = array(
'hide_empty' => 0,
);

$args = wp_parse_args( $args, $defaults );
$terms = get_terms( $taxonomy, $args );

/**
* https://developer.wordpress.org/reference/functions/_get_term_hierarchy/
*/
$hierarchy = _get_term_hierarchy( $taxonomy );

$term_list = array();
foreach ( $terms as $term ) {

if( $term->parent ) {
continue;
}

$term_list[ $term->term_id ] = $term->name;

if( isset( $hierarchy[ $term->term_id ] ) ) {

foreach ( $hierarchy[ $term->term_id ] as $child ) {

$child = get_term( $child, $taxonomy );
$term_list[ $child->term_id ] = $term->name . ' > ' . $child->name;

if( !isset( $hierarchy[ $child->term_id ] ) )
continue;

foreach ($hierarchy[ $child->term_id ] as $subchild) {

$subchild = get_term( $subchild, $taxonomy );
$term_list[ $subchild->term_id ] = $term->name . ' > ' . $child->name. ' > ' .$subchild->name;

}

}

}

}

return $term_list;

}
1

Другие решения

Других решений пока нет …