WordPress Version: 3.7
/**
* Retrieve category parents with separator.
*
* @since 1.2.0
*
* @param int $id Category ID.
* @param bool $link Optional, default is false. Whether to format with link.
* @param string $separator Optional, default is '/'. How to separate categories.
* @param bool $nicename Optional, default is false. Whether to use nice name for display.
* @param array $visited Optional. Already linked to categories to prevent duplicates.
* @return string|WP_Error A list of category parents on success, WP_Error on failure.
*/
function get_category_parents($id, $link = false, $separator = '/', $nicename = false, $visited = array())
{
$chain = '';
$parent = get_term($id, 'category');
if (is_wp_error($parent)) {
return $parent;
}
if ($nicename) {
$name = $parent->slug;
} else {
$name = $parent->name;
}
if ($parent->parent && $parent->parent != $parent->term_id && !in_array($parent->parent, $visited)) {
$visited[] = $parent->parent;
$chain .= get_category_parents($parent->parent, $link, $separator, $nicename, $visited);
}
if ($link) {
$chain .= '<a href="' . esc_url(get_category_link($parent->term_id)) . '" title="' . esc_attr(sprintf(__("View all posts in %s"), $parent->name)) . '">' . $name . '</a>' . $separator;
} else {
$chain .= $name . $separator;
}
return $chain;
}