Paramètres

$term_id(int)requis

Id du terme parent. Tous les termes retournés doivent être des enfants de ce terme.

$terms(array)requis

Les termes à retournés dans un tableau d'objets ou d'ids. Seulement les termes descendants seront choisis.

$taxonomy(string)requis

Nom de la taxonomie des termes à retournés.

$ancestors(array)optionnel

Tableau des termes parents qui ont déjà été identifié. Passé par référence pour garder une trace des termes trouvées quand la hiérarchie est récursive. Est utile pour éviter les boucles de récursion infinies. Par soucis de performance, $term_id est utilisé comme clé de ce tableau et a pour valeur 1.

Valeur par défaut : array()

Description / Informations supplémentaires

Si $terms est un tableau d'objets, _get_term_children() retournera un tableau d'objets. Si $terms est un tableau d'ids, _get_term_children() retournera un tableau d'ids.

Retourne

(array|WP_Error) Retourne l'ensemble de $terms qui sont les descendants de $term_id.

Déclaration et structure de la fonction _get_term_children()

function _get_term_children( $term_id, $terms, $taxonomy, &$ancestors = array() ) {
    $empty_array = array();
    if ( empty( $terms ) ) {
        return $empty_array;
    }

    $term_id      = (int) $term_id;
    $term_list    = array();
    $has_children = _get_term_hierarchy( $taxonomy );

    if ( $term_id && ! isset( $has_children[ $term_id ] ) ) {
        return $empty_array;
    }

    // Include the term itself in the ancestors array, so we can properly detect when a loop has occurred.
    if ( empty( $ancestors ) ) {
        $ancestors[ $term_id ] = 1;
    }

    foreach ( (array) $terms as $term ) {
        $use_id = false;
        if ( ! is_object( $term ) ) {
            $term = get_term( $term, $taxonomy );
            if ( is_wp_error( $term ) ) {
                return $term;
            }
            $use_id = true;
        }

        // Don't recurse if we've already identified the term as a child - this indicates a loop.
        if ( isset( $ancestors[ $term->term_id ] ) ) {
            continue;
        }

        if ( (int) $term->parent === $term_id ) {
            if ( $use_id ) {
                $term_list[] = $term->term_id;
            } else {
                $term_list[] = $term;
            }

            if ( ! isset( $has_children[ $term->term_id ] ) ) {
                continue;
            }

            $ancestors[ $term->term_id ] = 1;

            $children = _get_term_children( $term->term_id, $terms, $taxonomy, $ancestors );
            if ( $children ) {
                $term_list = array_merge( $term_list, $children );
            }
        }
    }

    return $term_list;
}
_get_term_hierarchy()

Retourne l'id des termes enfants d'une taxonomie.

_get_term_children()

Retourne l'ensemble de $terms qui sont les descendants de $term_id.

get_term()

Retourne toutes les données d'un terme en donnant son ID.

is_wp_error()

Vérifie si la variable est une erreur WordPress.

Où est utilisée la fonction _get_term_children() dans le CMS WordPress

Sources

Codex WordPress : _get_term_children()

Autres fonctions dans le même fichier : wp-includes/taxonomy.php

Retour