Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save matbrady/467d0259bb6df2dfa0b64da8c31c83d3 to your computer and use it in GitHub Desktop.
Save matbrady/467d0259bb6df2dfa0b64da8c31c83d3 to your computer and use it in GitHub Desktop.
WordPress function to get a complete taxonomy hierarchy of terms in PHP
<?php
/**
* Recursively get taxonomy and its children
*
* @param string $taxonomy
* @param int $parent - parent term id
* @return array
*/
function get_taxonomy_hierarchy( $taxonomy, $parent = 0 ) {
// only 1 taxonomy
$taxonomy = is_array( $taxonomy ) ? array_shift( $taxonomy ) : $taxonomy;
// get all direct decendants of the $parent
$terms = get_terms( $taxonomy, array( 'parent' => $parent ) );
// prepare a new array. these are the children of $parent
// we'll ultimately copy all the $terms into this new array, but only after they
// find their own children
$children = array();
// go through all the direct decendants of $parent, and gather their children
foreach ( $terms as $term ){
// recurse to get the direct decendants of "this" term
$term->children = get_taxonomy_hierarchy( $taxonomy, $term->term_id );
// add the term to our new array
$children[ $term->term_id ] = $term;
}
// send the results back to the caller
return $children;
}
/**
* Recursively get all taxonomies as complete hierarchies
*
* @param $taxonomies array of taxonomy slugs
* @param $parent int - Starting parent term id
*
* @return array
*/
function get_taxonomy_hierarchy_multiple( $taxonomies, $parent = 0 ) {
if ( ! is_array( $taxonomies ) ) {
$taxonomies = array( $taxonomies );
}
$results = array();
foreach( $taxonomies as $taxonomy ){
$terms = get_taxonomy_hierarchy( $taxonomy, $parent );
if ( $terms ) {
$results[ $taxonomy ] = $terms;
}
}
return $results;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment