it-swarm.com.de

Wie bekomme ich eine Liste der Termnamen des benutzerdefinierten Beitragstyps, auf dem ich gerade in single.php bin?

Ok, ich habe einen benutzerdefinierten Beitragstyp "Produkte" und eine benutzerdefinierte Taxonomie "Typen". Jetzt habe ich in der Typentaxonomie Dutzende von Kategorien und Unterkategorien, die benutzerdefinierten Beitragstypen zugewiesen sind.

Benutzerdefinierte Beitragstyp Artikel: Blaues Auto

Kategorien, die dem Auto zugewiesen sind: Honda> Accord> LX

Also, was ich versuche zu erreichen, ist, wenn ich zu einem bestimmten benutzerdefinierten Post-Typ gehe, single.php wie "Blue Car". Ich möchte alle Kateogien sehen, die "Blue Car" zugewiesen sind:

Kategorien: Honda, Accord, LX

Ich habe versucht, get_terms_byget_terms und wp_list_categories zu verwenden, aber es scheint nicht zu funktionieren oder ich verwende einige von ihnen nicht richtig. Hier ist, was ich gerne habe, um mich zu informieren, ob es einen besseren oder einen anderen Weg gibt, dies zu tun:

<ul>
<?php

//get the current term
$current_term = get_term_by( 'slug', get_query_var( 'term' ), get_query_var( 'taxonomy' ) );

//set the args for wp_list_categories
 $args = array(
  'child_of' => $current_term->term_id,
  'taxonomy' => 'types',
  'hide_empty' => 1,
  'order'      => 'ASC',
  'show_count'     => 1,
  'hierarchical' => true,
  'depth'  => 1,
  'title_li' => ''
    );
 wp_list_categories( $args );
?>
</ul>
1
Lucas Santos

SIDENOTE: Diese Funktion kann auch verwendet werden, wenn Posts nur zu einer Taxonomie gehören. Sie benötigen keinen Beitrag, der zu zwei oder mehr Taxonomien in derselben Hierarchie gehört. Ich habe diese Funktion sehr flexibel gemacht

Es ist immer ein Problem für mich, eine Kategorieliste oder eine Begriffsliste für einen Beitrag anzuzeigen, wenn die folgenden Bedingungen zutreffen

  • Einen Beitrag mit Begriffen haben, die zu zwei verschiedenen Taxonomien gehören

  • Verwenden einer Vorlage zum Anzeigen von Beiträgen, und Sie haben Beiträge mit Begriffen, die zu mehr als einer Taxonomie gehören

Sie kommen in eine Situation, in der Sie Funktionen duplizieren müssen, eine für jede Taxonomie. Beispielsweise gehört ein Beitrag zu Begriffen in zwei Taxonomien, mytax1 und mytax2. Um die Begriffsliste anzuzeigen, müssen Sie tun

echo get_the_term_list( $post->ID, 'mytax1' );
echo get_the_term_list( $post->ID, 'mytax2' );

Dies wird ein Chaos, wenn der nächste Beitrag zur Standardtaxonomie gehört. category

Ich habe eine Funktion geschrieben, die alle zu einem Beitrag gehörenden Taxonomien in einer Funktion zusammenfasst. Mit dieser Funktion können alle Taxonomien der eingebauten Taxonomien angezeigt werden (außer post_format).

So funktioniert die Funktion:

1.) Diese Funktion verwendet get_the_term_list() , um die Begriffsliste anzuzeigen. Daher verwendet diese Funktion dieselbe Funktionalität wie get_the_term_list().

2.) Muss innerhalb der Schleife verwendet werden. Diese Funktion funktioniert nicht außerhalb der Schleife

3.) Die Post-ID und der Taxonomiename werden standardmäßig an die Funktion get_the_term_list() übergeben

4.) Hier ist die Liste der Argumente

vor (Zeichenfolge) (optional) Führender Text

Standard: leere Zeichenfolge

sep (string) (optional) String zum Trennen von Tags

Standard: leere Zeichenfolge

nach (Zeichenfolge) (optional) Nachgestellter Text

Standard: leere Zeichenfolge

display_tax_name (bool) (optional) Soll der Taxonomiename vor der Liste angezeigt werden?.

Voreinstellung: false

taxonomy_sep (string) (optional) Text, mit dem der Taxonomiename von der Begriffsliste getrennt wird

Standard: '&colon; &nbsp; &nbsp;'

multi_tax_sep (string) (optional) Wenn der Beitrag Begriffe enthält, die zu mehr als einer Taxonomie gehören, wird der Text verwendet, um die zwei oder mehr Begriffslisten zu trennen

Standard: </br>

hierarchisch (bool) (optional) Sollte die Liste hierarchische Taxonomien (wie Kategorien) oder nicht hierarchische Taxonomien (wie Post-Tags) anzeigen?

Voreinstellung: true

5.) Die Argumente können als Array oder als String an die Funktion übergeben werden

6.) Benötigt PHP 5.4+

Dies wird funktionieren (String)

'display_tax_name=' . true .'&hierarchical=' . false . '&taxonomy_sep=' . html_entity_decode( '&raquo;&nbsp;&nbsp;' )

Und das wird funktionieren

$args = [
    'display_tax_name' => true,
    'hierarchical' => false,
    'taxonomy_sep' => html_entity_decode( '&raquo;&nbsp;&nbsp;' ) 
] 

Die Funktion

function get_taxonomies_terms_links( $args = '' ){
    global $post;

    $defaults = [
        'before'            => '', 
        'sep'               => '', 
        'after'             => '',
        'display_tax_name'  => false,
        'taxonomy_sep'      => '&colon; &nbsp; &nbsp;',
        'multi_tax_sep'     => '</br>',
        'hierarchical'      => true
    ];
    $args = wp_parse_args( $args, $defaults );

    $post_type = $post->post_type;
    $taxonomies = get_object_taxonomies( $post_type, 'objects' );

    $returned_list = [];
    foreach ( $taxonomies as $taxonomy_slug => $taxonomy ){
        if( $args['hierarchical'] == $taxonomy->hierarchical && has_term( '', $taxonomy_slug ) && 'post_format' != $taxonomy_slug ) {
            $term_list = get_the_term_list( $post->ID, $taxonomy_slug, $args['before'], $args['sep'], $args['after'] );

            if( true == $args['display_tax_name'] ){
                $returned_list[] = strtoupper($taxonomy_slug) . $args['taxonomy_sep'] . $term_list;
            }else{
                $returned_list[] = $term_list;
            }
        }
    }

    if( $returned_list ) {  
        $count =  count($returned_list); 
        if( 1 === $count ) {
            return implode( '', $returned_list );
        }else{
            $multi_list = [];
            foreach ( $returned_list as $key=>$value ) {
                if (array_key_exists($key + 1, $returned_list)) {
                    $multi_list[] = $value . $args['multi_tax_sep'];
                }else{
                    $multi_list[] = $value;
                }
            }
            return implode( '', $multi_list );
        }
    }
}

Beispiel für die Verwendung in einer Vorlage zur Anzeige der Begriffsliste. Sie können entweder die normalen Lesezeichen oder HTML-Entitäten in Verbindung mit html_entity_decode() und dem Zeichendiagramm verwenden.

Argumente als Zeichenfolge

<span class="cat-links">
    <?php echo get_taxonomies_terms_links('sep=, &display_tax_name=' . true .'&taxonomy_sep=' . html_entity_decode( '&raquo;&nbsp;&nbsp;' ) ); ?>
</span>

Argumente als Array

<span class="cat-links">
    <?php 
        echo get_taxonomies_terms_links(
            [
            'sep'               => ', ',
            'display_tax_name'  => true,
            'taxonomy_sep'      => html_entity_decode( '&raquo;&nbsp;&nbsp;' ) 
            ],
        );
    ?>
</span>
3
Pieter Goosen

Die Funktionen, die Sie ausprobiert haben, beziehen sich auf Begriffe für sich , die nur in der Site vorhanden sind.

Was Sie suchen, ist get_the_terms() , das Begriffe einer bestimmten Taxonomie abruft, die einem bestimmten Beitrag zugewiesen sind.

0
Rarst