旁注:即使have post只属于一个分类法,也可以使用此函数。您不需要在同一层次结构中拥有属于两个或多个分类法的帖子。我已使此功能非常灵活
如果出现以下情况,显示帖子的类别列表或术语列表对我来说总是一个问题
拥有属于两种不同分类法的术语的帖子
使用一个模板显示帖子,您的帖子中包含属于多个分类法的术语
在这种情况下,您需要复制函数,每个分类法对应一个函数。例如,一篇文章属于两种分类法中的术语,mytax1
和mytax2
. 要显示术语列表,您必须执行以下操作
echo get_the_term_list( $post->ID, \'mytax1\' );
echo get_the_term_list( $post->ID, \'mytax2\' );
当下一篇文章属于默认分类法时,这会变得一团糟
category
我去写了一个函数,它将所有分类组合在一起,一个函数可以显示属于一篇文章的所有分类法的所有术语,这个函数可以用于显示内置分类法的任何分类法(除了post_format
)
下面是函数的工作原理:
1。)此函数利用
get_the_term_list()
显示术语列表,以便此函数使用与
get_the_term_list()
2.)必须在回路内使用。此函数在循环外不起作用
3.)默认情况下,将post ID和分类名称传递给get_the_term_list()
作用
4.)以下是参数列表
before (字符串)(可选)前导文本
默认值:空字符串
sep (string)(可选)用于分隔标记的字符串
默认值:空字符串
after (字符串)(可选)尾随文本
默认值:空字符串
display_tax_name (bool)(可选)如果分类名称显示在列表前面。
默认值:false
taxonomy_sep (字符串)(可选)用于从术语列表中分隔分类名称的文本
默认值:\': \'
multi_tax_sep (字符串)(可选)如果帖子包含属于多个分类法的术语,则为用于分隔两个或多个术语列表的文本
默认值:</br>
hierarchical (bool)(可选)列表是否显示层次分类法(如类别)或非层次分类法(如post标记)
默认值:true
5.)参数可以作为数组或字符串传递给函数
6.)需要PHP 5.4+
这将起作用(字符串)
\'display_tax_name=\' . true .\'&hierarchical=\' . false . \'&taxonomy_sep=\' . html_entity_decode( \'» \' )
这就行了
$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 );
}
}
}
在模板中用于显示术语列表的示例。您可以结合使用普通的阅读字符或HTML实体
html_entity_decode()
以及
character chart参数为字符串
<span class="cat-links">
<?php echo get_taxonomies_terms_links(\'sep=, &display_tax_name=\' . true .\'&taxonomy_sep=\' . html_entity_decode( \'» \' ) ); ?>
</span>
作为数组的参数
<span class="cat-links">
<?php
echo get_taxonomies_terms_links(
[
\'sep\' => \', \',
\'display_tax_name\' => true,
\'taxonomy_sep\' => html_entity_decode( \'» \' )
],
);
?>
</span>