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_by
get_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>
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
).
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:
': '
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( '» ' )
Und das wird funktionieren
$args = [
'display_tax_name' => true,
'hierarchical' => false,
'taxonomy_sep' => html_entity_decode( '» ' )
]
function get_taxonomies_terms_links( $args = '' ){
global $post;
$defaults = [
'before' => '',
'sep' => '',
'after' => '',
'display_tax_name' => false,
'taxonomy_sep' => ': ',
'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( '» ' ) ); ?>
</span>
Argumente als Array
<span class="cat-links">
<?php
echo get_taxonomies_terms_links(
[
'sep' => ', ',
'display_tax_name' => true,
'taxonomy_sep' => html_entity_decode( '» ' )
],
);
?>
</span>
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.