web-dev-qa-db-ja.com

階層順によるget_the_term_list

    function btp_entry_capture_categories() {
        $out = '';

        global $post;

        $taxonomies = get_object_taxonomies( $post );

        foreach ( $taxonomies as $taxonomy ) {  
            $taxonomy = get_taxonomy( $taxonomy );  
            if ( $taxonomy->query_var && $taxonomy->hierarchical ) {

                $out .= '<div class="entry-categories">';
                    $out .= '<h6>' . $taxonomy->labels->name . '</h6>';
                    $out .= get_the_term_list( $post->ID, $taxonomy->name, '<ul><li>', '</li><li>', ' › </li></ul>' );
                $out .= '</div>';
            }
        }

        return $out;
    }

カテゴリリストを階層順に出力しようとしていますが、自分のコードでも可能ですか。そのための最善の方法は何でしょうか。

3
wpuser

get_the_term_list()はここでは動作しません。使用するのに最適な関数は wp_get_post_terms() です。

次の仮定では、これはうまくいく可能性があります。

  • 投稿が1人の親、1人の子供および/または1人の孫にのみ属する場合は、term_idで条件を並べることができます。

  • 親は子供よりも小さい番号のIDを持ち、子供は孫よりも小さい番号のIDを持つことが広く受け入れられています。

この情報で、あなたはあなたのコードの中でそれから続くようにポスト用語を得ることができます

wp_get_post_terms( $post->ID, $taxonomy->name, array( 'orderby' => 'term_id' ) );

しかし、私が言ったように、あなたはあなたの投稿に同じ木の中に1人の親、1人の子供と1人の孫だけがいる必要があるでしょう

_編集_

あなたはこのようなことを試すことができます。 HTMLマークアップを自分で追加するだけです。

function btp_entry_capture_categories() {
    $out = '';

    global $post;

    $taxonomies = get_object_taxonomies( $post );

    foreach ( $taxonomies as $taxonomy ) {  
        $taxonomy = get_taxonomy( $taxonomy );  
        if ( $taxonomy->query_var && $taxonomy->hierarchical ) {

            $out .= '<div class="entry-categories">';
                $out .= '<h6>' . $taxonomy->labels->name . '</h6>';

                $terms = wp_get_post_terms( $post->ID, $taxonomy->name, array( 'orderby' => 'term_id' ) );
                foreach ( $terms as $term ) {

                    $out .= $term->name;

                }
            $out .= '</div>';
        }
    }

    return $out;
}
4
Pieter Goosen