wake-up-neo.net

get_the_term_list by hierarchy order

    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;
    }

Ich versuche, die Kategorieliste nach Hierarchie zu sortieren. Kann ich mit meinem Code etwas anfangen? Was wäre der beste Ansatz dafür?

3
wpuser

get_the_term_list() wird hier nicht funktionieren. Die beste zu verwendende Funktion wäre wp_get_post_terms()

Mit der folgenden Annahme kann dies funktionieren

  • Wenn ein Beitrag nur einem Elternteil, einem Kind und/oder einem Enkelkind gehört, können Sie die Bedingungen nach term_id bestellen.

  • Es ist allgemein anerkannt, dass der Elternteil eine niedrigere ID als das Kind und das Kind eine niedrigere ID als das Enkelkind hat

Mit diesen Informationen können Sie die Post-Bedingungen wie folgt in Ihrem Code abrufen

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

Aber wie gesagt, Sie müssen Ihre Stelle nur einen Elternteil, ein Kind und ein Enkelkind im selben Baum haben

EDIT

Sie können so etwas versuchen. Sie müssen nur den HTML-Code selbst hinzufügen

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