web-dev-qa-db-ja.com

カスタム投稿タイプの分類法のget_category_parents

次のようにして、通常の投稿タイプで親カテゴリを取得できることを私は知っています。

get_category_parents($cat, TRUE, ' » ');

しかし、カスタム投稿タイプで親カテゴリを取得する方法を教えてください。

私はこれを使用します。

if ( is_category() || is_single() && !is_singular( 'portfolio' ) ) { // Full path links 
    $category = get_the_category();
    $ID = $category[0]->cat_ID;
    echo '<li>'.get_category_parents( $ID, TRUE, '', FALSE ).'</li>';       
} elseif ( is_singular( 'portfolio' ) ) {
    $category = get_the_terms( $post->ID, 'portfolio-category' );
    $ID = $category[0]->cat_ID;
    echo '<li>'.get_category_parents( $ID, TRUE, '', FALSE ).'</li>';
}
1
elkebirmed

更新された答え:

WordPress 4.8以降、与えられた用語の先祖をリストするためのコア 関数 が追加されました。

get_term_parents_list( 
    int $term_id, 
    string $taxonomy, 
    string|array $args = array() 
)

and get_category_parents()$taxonomy'category'とするその関数のラッパーです。

前の答え:

これは私が一般分類法をサポートするために関数get_category_parents()から作った修正版です。

/**
 * Retrieve category parents with separator for general taxonomies.
 * Modified version of get_category_parents()
 *
 * @param int $id Category ID.
 * @param string $taxonomy Optional, 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
 */
function wpse85202_get_taxonomy_parents( $id, $taxonomy = 'category', $link = false, $separator = '/', $nicename = false, $visited = array() ) {

            $chain = '';
            $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 .= wpse85202_get_taxonomy_parents( $parent->parent, $taxonomy, $link, $separator, $nicename, $visited );
            }

            if ( $link )
                    $chain .= '<a href="' . esc_url( get_term_link( $parent,$taxonomy ) ) . '" title="' . esc_attr( sprintf( __( "View all posts in %s" ), $parent->name ) ) . '">'.$name.'</a>' . $separator;
            else
                    $chain .= $name.$separator;

            return $chain;
    }

あなたはこのような機能を使用することができます:

echo wpse85202_get_taxonomy_parents($cat, $tax, TRUE, ' &raquo; ');

または好き

echo wpse85202_get_taxonomy_parents(65, 'country', TRUE, ' &raquo; ');
0
birgire