如果为空,则不显示分类

时间:2013-11-11 作者:sanjaypoyzer

我正在使用以下代码显示我的自定义帖子分类:

function display_post_taxonomies( $content ) {

if( is_single() ) { 
    $args = array( \'public\' => true, \'_builtin\' => false );     
    $output = \'objects\';        
    $operator = \'and\';      
    $taxonomies = get_taxonomies( $args, $output, $operator );

    if( $taxonomies ) {     
        $content .= \'<div class="taxonomy_container">\';         
        foreach( $taxonomies as $taxonomy ) {           
            $args = array(
                            \'orderby\'               => \'name\',
                            \'echo\'                  => false,
                            \'taxonomy\'              => $taxonomy->name,
                            \'title_li\'              => \'<span class="taxonomy_title">\' . __( $taxonomy->labels->name, \'your-themes-text-domain\' ) . \'</span>\',
                            \'show_option_none\'      => __( \'No \' . $taxonomy->labels->name, \'your-themes-text-domain\' )
                        );
            $content .= \'<ul>\' . wp_list_categories( $args ) . \'</ul>\';             
        }           
        $content .= \'</div>\';       
    }
}   
return $content;
}

add_filter( \'the_content\', \'display_post_taxonomies\' );
这很好用,只是有些情况下我的自定义分类法中没有任何内容。在这些情况下,我根本不希望显示任何内容,即没有分类标题或默认的“无术语”消息。

我只需设置show_option_nonefalse, 但这就留下了分类法的名称。

我真正需要的是if 语句类似于

if($taxonomy => \'objects\'){
    //$args & &content arrays
}
但这行不通。

非常感谢您的帮助。

2 个回复
SO网友:gmazzap

您需要的是设置show_option_none 添加到易于识别的字符串,然后添加wp_list_categories 仅当内容不包含该字符串时。。

所以你的foreach循环应该看起来像

foreach( $taxonomies as $taxonomy ) {           
  $args = array(
    \'orderby\' => \'name\',
    \'echo\' => false,
    \'taxonomy\' => $taxonomy->name,
    \'title_li\' => \'<span class="taxonomy_title">\' . __( $taxonomy->labels->name, \'your-themes-text-domain\' ) . \'</span>\',
    \'show_option_none\' => \'%%NOCAT%%\'
  );
  $list = wp_list_categories( $args );
  $empty = (bool) substr_count( strip_tags($list), \'%%NOCAT%%\');
  $content .= ! $empty ? \'<ul>\' . $list . \'</ul>\' : \'\';              
} 
这样,如果您的海关税没有条款wp_list_categories 未添加到html输出。

几天前,我遇到了一个问题,比如

add_filter( \'the_content\', \'display_post_taxonomies\' );
因为一些SEO插件使用get_the_excerpt 要在<head> 页面的节。问题是get_the_excerpt, 如果没有post的手动摘录,请致电wp_trim_excerpt 这个函数启动the_content 钩结果:您将在页面的头部找到分类法列表:这太糟糕了。

您还应该注意\'the_content\' 钩子不仅可以在主查询中触发,所以如果您在侧栏或页脚上有一些辅助查询,您的函数将在那里再次调用:这很糟糕。

我建议你

if( is_single() ) {
替换为

if( is_single() && did_action(\'loop_start\') ) {
此阻止功能在<head> 部分

然后,在返回内容之前删除过滤器,这样可以确保过滤器运行一次,因此

return $content;
成为

remove_filter( \'the_content\', \'display_post_taxonomies\' );
return $content;

SO网友:D. Joes

使用get\\u the\\u term\\u list代替返回术语列表而不是打印的\\u terms,因此输出可以用于这两个目的。检查答案:Display taxonomy term only if there's a value

结束

相关推荐

使用特定Single.php模板在Custom Taxonomy下创建术语

昨天一些很棒的人帮我解决了这个问题templates for custom taxonomy terms. 现在我有一个相关的问题。同样,我在函数中设置了一个自定义的post类型。php称为“研究”我有一个叫做“分类”的自定义分类法根据该分类法,我有以下术语:oldresearch(父项)--子项1---子项2我需要在这个术语“旧研究”下的所有单页和子目录中使用一个模板。我已经有一项研究了。其他地方正在使用的php。所以这不是我的首选。有什么想法吗?请详细说明,因为我是PHP新手-抱歉。哈哈,提前谢谢!