Last active
December 16, 2022 16:10
-
-
Save s3rgiosan/5fcb25357cd990ddf31c0dd1db8bc2f6 to your computer and use it in GitHub Desktop.
A collection of helper functions for terms.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Returns the terms associated with the given object, hierarchically structured. | |
* | |
* @param array $object_id The ID of the object to retrieve. | |
* @param string|string[] $taxonomies The taxonomy names to retrieve terms from. | |
* @return array | |
*/ | |
function get_object_hierarchical_terms( $object_id, $taxonomies ) { | |
// Retrieve the terms. | |
$terms = wp_get_object_terms( $object_id, $taxonomies ); | |
$hierarchical_terms = []; | |
foreach ( $terms as $term ) { | |
if ( $term->parent > 0 ) { | |
continue; | |
} | |
$term_id = $term->term_id; | |
$hierarchical_terms[ $term_id ] = $term; | |
$child_terms = collect_terms( $term_id, $terms ); | |
if ( ! empty( $child_terms ) ) { | |
$hierarchical_terms[ $term_id ]->children = $child_terms; | |
} | |
} | |
return $hierarchical_terms; | |
} | |
/** | |
* Collects an array of terms into an organised collection. | |
* | |
* @param int $parent_id The parent term ID. | |
* @param array $terms Array of terms. | |
* @return array | |
*/ | |
function collect_terms( $parent_id, $terms ) { | |
$children = []; | |
foreach ( $terms as $term ) { | |
if ( $term->parent !== $parent_id ) { | |
continue; | |
} | |
$term_id = $term->term_id; | |
$children[ $term_id ] = $term; | |
$child_terms = collect_terms( $term_id, $terms ); | |
if ( ! empty( $child_terms ) ) { | |
$children[ $term_id ]->children = $child_terms; | |
} | |
} | |
return $children; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment