如何获取Single.php中当前启用的定制帖子类型IM的术语名称列表

时间:2014-11-11 作者:Lucas Santos

好的,我有一个自定义的post类型“Products”,还有一个自定义的分类法“Types”。现在在类型分类法中,我为自定义帖子类型分配了几十个类别和子类别。

自定义Post类型项目:蓝色汽车

分配给汽车的类别:本田>雅阁>LX

因此,我试图实现的是当我转到一个特定的自定义帖子类型时。php类“Blue Car”我希望看到分配给“Blue Car”的所有类别如下所示:

Categories: Honda, Accord, LX

我试过使用get_terms_by get_termswp_list_categories 但它似乎不起作用,或者我没有正确地使用其中的一些。如果有更好的方法或其他方法可以做到这一点,我可以随时告诉我以下内容:

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

2 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

旁注:即使have post只属于一个分类法,也可以使用此函数。您不需要在同一层次结构中拥有属于两个或多个分类法的帖子。我已使此功能非常灵活

如果出现以下情况,显示帖子的类别列表或术语列表对我来说总是一个问题

拥有属于两种不同分类法的术语的帖子

使用一个模板显示帖子,您的帖子中包含属于多个分类法的术语

在这种情况下,您需要复制函数,每个分类法对应一个函数。例如,一篇文章属于两种分类法中的术语,mytax1mytax2. 要显示术语列表,您必须执行以下操作

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 (字符串)(可选)用于从术语列表中分隔分类名称的文本

默认值:\'&colon; &nbsp; &nbsp;\'

multi_tax_sep (字符串)(可选)如果帖子包含属于多个分类法的术语,则为用于分隔两个或多个术语列表的文本

默认值:</br>

hierarchical (bool)(可选)列表是否显示层次分类法(如类别)或非层次分类法(如post标记)

默认值:true

5.)参数可以作为数组或字符串传递给函数

6.)需要PHP 5.4+

这将起作用(字符串)

\'display_tax_name=\' . true .\'&hierarchical=\' . false . \'&taxonomy_sep=\' . html_entity_decode( \'&raquo;&nbsp;&nbsp;\' )
这就行了

$args = [
    \'display_tax_name\' => true,
    \'hierarchical\' => false,
    \'taxonomy_sep\' => html_entity_decode( \'&raquo;&nbsp;&nbsp;\' ) 
] 
函数
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 );
        }
    }
}
在模板中用于显示术语列表的示例。您可以结合使用普通的阅读字符或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( \'&raquo;&nbsp;&nbsp;\' ) ); ?>
</span>
作为数组的参数

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

SO网友:Rarst

您尝试的功能是针对术语本身,仅存在于站点中。

你要找的是get_the_terms(), 它检索指定给特定职位的特定分类的术语。

结束

相关推荐

如何对抗这种wp-info.php漏洞?

几周以来,我的WordPress网站上引入了一个漏洞,我无法找到明确的方法删除它。我称之为“wp-info.php漏洞”,因为它会wp-info.php WordPress目录中的某个位置的文件,有时被深埋。此漏洞的症状不容易看到。网站的主要功能看起来没有受到影响,但当我查看访问日志时,我看到我自己的网站提供了一些奇怪的URL:成人聊天生涯martunis van sant约会占星术黑人单身者免费个人广告。。。还有很多相似的IMAGE REMOVED该页面显示我自己的网站结构和菜单,但内容被一些垃圾文本取