如何在WordPress中根据帖子的类别更改帖子的布局和样式?

时间:2011-05-31 作者:oliverwhite

我正在定制WordPress安装,想知道最好的方法是什么。我想完全根据类别自定义每个帖子。每个职位将只属于一个类别。

5 个回复
SO网友:Michael

对于css路由,您可以使用post_class() 函数为您提供依赖于类别的css类。

如果超出格式设置,即根据类别输出不同的元素,则可以使用conditional tag in_category() 在“if-elseif-else”结构中。

类别档案可以使用category templates.

SO网友:dwenaus

如果您想要完全控制,那么css解决方案是不够的。一个更强大的解决方案是基于类别slug为单个帖子创建一种模板层次结构。以下是总体思路。

单件。php使用get\\u the\\u category()查找连接到帖子的类别-如果如您所说,将只分配一个类别,那么只需使用返回数组中的第一个值。一旦你有了猫的对象,就得到它的slug。从那里查看该文件名是否存在于与“single-”和catslug匹配的主题文件夹中,如果存在,则加载它。否则,继续使用常规的单post循环。然后为特定类别创建帖子模板,并根据类别slug对其命名。即:单个mycatslug。php。

以下是一些代码:

$my_cats = get_the_category();

if ( is_array( $my_cats ) ) {
    $my_cat_slug = $my_cats[0]->slug;
}

$my_template = \'single-\' . $my_cat_slug . \'.php\';

if ( file_exists( TEMPLATEPATH  . $my_template ) ) {
    get_template_part( $my_template );
} else {
    // run normal loop for single post
}
我在一个生产网站上运行了这个程序,效果很好。

SO网友:Anh Tran

有两个函数可以帮助您处理WP中的类:body_class()post_class(). 当您使用body_class(), 您可以在特定类别中为帖子设置样式,如下所示(在CSS文件中):

/* normal rule for all posts */
.post-title {font-size: 22px; color: #0f0}

/* for posts in Talks category only */
.category-talks .post-title {font-size: 28px; color: #fff}

SO网友:Brad Dalton

在函数文件中添加一个自定义类,以对同一类别中的所有帖子以及类别存档页面进行样式设置。

add_filter( \'body_class\', \'wpsites_add_body_class\' );
function wpsites_add_body_class( $classes ) {
if ( in_category(\'8\')) {
   $classes[] = \'your-custom-class\';
   return $classes;
   }
}
还有一些CSS示例:

.your-custom-class {
    background-color: red;
    color: #fff;
}

SO网友:Rahul

我会这样做:

根据单个帖子包含的类别向其添加CSS类使用样式表中的这些CSS类根据类别对帖子进行样式化;PHP,直接进入functions.php 您的主题:

/**
 * Add CSS class(es) to the body of the single posts with the prefix `has-cateogry-`
 *
 * @param Array An array of body classes
 * @return Array A modified array of body classes
 */
 function wpse_18860( $classes ) {
  if( is_single() ) {
    global $post;
    foreach( ( get_the_category( $post->ID ) ) as $category ) {
      // add category-slug with the prefix \'has-category-\' to the $classes array
      $classes[] = \'has-category-\' . $category->cat_name;
    }
  }
  // return the $classes array
  return $classes;
}
add_filter( \'body_class\', \'wpse_18860\' );
和CSSstyle.css 主题文件:

/* Default style for the single posts */
.single {
  background-color: #ffd;
  color: #334;
}

/* Category-based style for the single posts */    
.single.has-category-travel {
  background-color: #332;
  color: rgba(255, 255, 255, .5);
}
没有那么精明,因为每次创建一个新类别时,都必须在CSS中添加一个新的样式选择器,以使用这个新类别设置帖子的样式。

结束

相关推荐

Displaying Custom Posts

在为我们正在创建的站点开发环境时,我遇到了一个奇怪的问题。我们有自定义的帖子类型,所以我不确定这是否是它不能正常工作的原因。然而,我设法让帖子一次显示5条,而不是正常的10条。然而,在其中一个类别中,它只显示20个帖子中的10个。奇怪的是,如果我转到另一个类别,它会正确运行。 <?php echo category_description(); ?> <?php if (have_posts()) : ?> <?php $i = 0; while (