<?php

/**
 * Retrieve taxonomy parents with separator.
 *
 * @since 1.2.0
 *
 * @param int $id Term ID.
 * @param string $taxonomy taxonomy name. Default is category.
 * @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_taxonomy_parents( $id, $taxonomy = 'category', $link = false, $separator = '/', $nicename = false, $visited = array() ) {
        $chain = '';

        if ( is_taxonomy_hierarchical( $taxonomy ) )
                return false;
        
        $parent = get_term( $id, $taxonomy );
        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_taxonomy_parents( $parent->parent, $taxonomy, $link, $separator, $nicename, $visited );
        }

        if ( $link )
                $chain .= '<a href="' . esc_url( get_category_link( $parent->term_id ) ) . '">'.$name.'</a>' . $separator;
        else
                $chain .= $name.$separator;
        return $chain;
}