Las categorías de múltiples jerarquías no muestran una jerarquía de tercer nivel en la taxonomía de wordpress

2 minutos de lectura

Tengo 3 niveles de categorías, categorías, subcategorías y subsubcategorías para el tipo de publicación personalizada. Estoy tratando de mostrar estas categorías en el menú desplegable usando cmb2mi código solo muestra 2 niveles de las categorías y falta el tercer nivel.

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

y estoy usando cmb2 para obtener estas categorías en select2 con opción de selección múltiple.

y escribe el siguiente código:

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;

}

mostrando solo 2 niveles y faltando el tercer nivel de categorías

y el menú desplegable se muestra como:

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

Aunque debería mostrarse como

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

Simplemente necesita recorrer un nivel más profundo:

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;

}

¿Ha sido útil esta solución?