Merges all term children into a single array of their IDs.
Description
This recursive function will merge all of the children of $term into the same array of term IDs. Only useful for taxonomies which are hierarchical.
Will return an empty array if $term does not exist in $taxonomy.
Parameters
$term_id
intrequired- ID of term to get children.
$taxonomy
stringrequired- Taxonomy name.
Source
function get_term_children( $term_id, $taxonomy ) {
if ( ! taxonomy_exists( $taxonomy ) ) {
return new WP_Error( 'invalid_taxonomy', __( 'Invalid taxonomy.' ) );
}
$term_id = (int) $term_id;
$terms = _get_term_hierarchy( $taxonomy );
if ( ! isset( $terms[ $term_id ] ) ) {
return array();
}
$children = $terms[ $term_id ];
foreach ( (array) $terms[ $term_id ] as $child ) {
if ( $term_id === $child ) {
continue;
}
if ( isset( $terms[ $child ] ) ) {
$children = array_merge( $children, get_term_children( $child, $taxonomy ) );
}
}
return $children;
}
Changelog
Version | Description |
---|---|
2.3.0 | Introduced. |
A Basic Example
Used to get an array of children taxonomies and write them out with links in an unordered list.
This would return something like.
Categories and Tags are the two pre-defined Taxonomies. The Taxonomy Name, the second required parameter $taxonomy, is ‘category’ for Categories and ‘post_tag’ for Tags.
If replacing the deprecated function get_category_children() , which returns a String, note that get_term_children() returns an array of Category IDs if the second parameter $taxonomy is ‘category’.
If the term exists in the taxonomy, but has no children, the term ID will be returned instead.