У меня есть 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;
}
и выпадающий показывает как:
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
Вам просто нужно сделать петлю на один уровень глубже:
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;
}
Других решений пока нет …