是否将自定义分类的帖子类添加到自定义帖子类型?

时间:2010-09-27 作者:JLeuze

我很惊讶地发现,自定义分类法并没有像类别和标记那样添加为body或post类。

我确信这将添加到WordPress的未来版本中,但与此同时,我需要向post类添加一个自定义分类法,以便我可以在该分类法的特定类别中为post设置不同的样式。

过滤post类并向其添加分类法是最优雅的。I found a snippet 我想在身体课上玩一个类似的把戏,但我还没有成功地适应它:

function wpprogrammer_post_name_in_body_class( $classes ){
 if( is_singular() )
 {
  global $post;
  array_push( $classes, "{$post->post_type}-{$post->post_name}" );
 }
 return $classes;
}

add_filter( \'body_class\', \'wpprogrammer_post_name_in_body_class\' );
更粗略地说,我考虑使用\\u terms函数为自定义帖子创建自己的类,如下所示:

<div class="<?php the_terms( $post->ID, \'taxonomy\', \'\', \' \', \'\' ); ?>"></div>
但是我必须过滤掉the_term 生成。

我是否遗漏了任何明显的东西,有没有更简单的方法来解决这个问题?

5 个回复
最合适的回答,由SO网友:JLeuze 整理而成

我找到了一段代码courtesy of mfields 这为我解决了这个问题,以下是我最终使用的:

<?php   // Add custom taxonomies to the post class

    add_filter( \'post_class\', \'custom_taxonomy_post_class\', 10, 3 );

    if( !function_exists( \'custom_taxonomy_post_class\' ) ) {

        function custom_taxonomy_post_class( $classes, $class, $ID ) {

            $taxonomy = \'listing-category\';

            $terms = get_the_terms( (int) $ID, $taxonomy );

            if( !empty( $terms ) ) {

                foreach( (array) $terms as $order => $term ) {

                    if( !in_array( $term->slug, $classes ) ) {

                        $classes[] = $term->slug;

                    }

                }

            }

            return $classes;

        }

    }  ?>

SO网友:rjb

Update: 截至年月日WordPress 4.2-alpha-31271 (2015年1月23日),自定义分类术语的CSS类现在由WordPress core在使用时自动添加get_post_class().

不再需要以下代码段。

这里有一个很好的实用函数add all registered, public taxonomy termspost_class() 用作主题中的CSS挂钩:

/**
* Add Custom Taxonomy Terms To The Post Class
*/

add_filter( \'post_class\', \'wpse_2266_custom_taxonomy_post_class\', 10, 3 );

if ( ! function_exists(\'wpse_2266_custom_taxonomy_post_class\') ) {
    function wpse_2266_custom_taxonomy_post_class($classes, $class, $ID) {

        $taxonomies_args = array(
            \'public\' => true,
            \'_builtin\' => false,
        );

        $taxonomies = get_taxonomies( $taxonomies_args, \'names\', \'and\' );

        $terms = get_the_terms( (int) $ID, (array) $taxonomies );

        if ( ! empty( $terms ) ) {
            foreach ( (array) $terms as $order => $term ) {
                if ( ! in_array( $term->slug, $classes ) ) {
                    $classes[] = $term->slug;
                }
            }
        }

        $classes[] = \'clearfix\';

        return $classes;
    }
}
来自扬·法布里先前回答的灵感和荣誉

将上述代码放入主题functions.php 文件然后post_class() 在模板中使用:

<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
它将输出附加到帖子的任何公共自定义分类术语,以及所有默认的帖子类。例如:

<article id="post-247" class="post-247 post-type ... status-publish hentry clearfix">
它可以轻松地处理自定义的帖子类型和分类法。

SO网友:bhammie85

我对@rjb的回答有所改进(对不起,我没有足够的声誉发表评论)。在调试模式打开的情况下,我遇到了一个“数组到字符串转换”错误,所以我对返回的分类法进行了foreach循环,现在没有错误了。

希望这对别人有帮助!

add_filter( \'post_class\', \'custom_taxonomy_post_class\', 10, 3 );

function custom_taxonomy_post_class($classes, $class, $ID) {

    $taxonomies_args = array(
        \'public\' => true,
        \'_builtin\' => false,
    );

    $taxonomies = get_taxonomies( $taxonomies_args, \'names\', \'and\' );

    foreach ($taxonomies as $taxonomy) {

    $terms = get_the_terms( (int) $ID, $taxonomy );

    if ( ! empty( $terms ) ) {
        foreach ( (array) $terms as $order => $term ) {
            if ( ! in_array( $term->slug, $classes ) ) {
                $classes[] = $term->slug;
            }
        }
    }


}

    $classes[] = \'clearfix\';

    return $classes;
}

SO网友:Jan Fabry

而不是the_terms, 你可以用get_the_terms, 它将返回分类术语对象。《食品法典》有仅标签版本的文档,get_the_tags.

这会给你这样的东西:

function wpprogrammer_custom_taxonomy_in_body_class( $classes ){
  if( is_singular() )
  {
    $custom_terms = get_the_terms(0, \'my_custom_taxonomy\');
    if ($custom_terms) {
      foreach ($custom_terms as $custom_term) {
        $classes[] = \'custom_tag_\' . $custom_term->slug;
      }
    }
  }
  return $classes;
}

add_filter( \'body_class\', \'wpprogrammer_custom_taxonomy_in_body_class\' );

SO网友:pravdomil

我做了一些编码,并向名为:Custom post types and taxonomies manager

在新的分类法中,有一个名为Post类的选项。允许添加category|tag-{slug}{slug}-{tax_value_slug} 去邮局。

在此处下载https://github.com/Pravdomil/wp-custom-post-types-man/archive/master.zip

结束

相关推荐