精通WordPress主题-3: 为不同的分类日志设置不同的样式

我要进行一个独特的挑战.我需要为Wordpress博客中的一个分类下面的博客文章页面指定不同的样式表. 有很多种方法可以实现,但是我想寻找最快速和最简单的途径。 我选择使用Wordpress的一个条件标签来检测某分类下面的日志,然后改变日志页面的header头部声明来为特定的分类自定义样式表。

在我的WordPress主题文件里面只有一个Header文件, 并且条件标签说 “如果这是一个单页, 显示单页并调用单页的样式表”, 我需要它像这样说:

如果这是 X 分类下面的单页
为这些单页显示特定的样式

默认情况下, WordPress Template Hierarchy/模板层次 状态是当你点击一个单篇日志页 面时,Wordpress将自动醒找single.php模板文件,如果没有找到,则查找并傅index.php文件。

我将要通过对
single.php

添加一个条件标签让它说 “如果这个单页是属于X 分类, 显示不同的风格”

If in_category 条件标签

首先,复制两个single.php文件分别取名为

single1.php
和single.2.php

.

然后,把原先的single.php文件里面的内容全部删除,并用下面的代码进行替换:


<?php
$post = $wp_query->post;
if ( in_category('9') ) {
include(TEMPLATEPATH . '/single2.php');
} else {
include(TEMPLATEPATH . '/single1.php');
}
?>

简单的说, 这串 PHP 代码将做出一个质疑查询:

检查日志. 如果日志是属于分类 ID 9下面,

显示single2.php

. 如果不是,则显示

single1.php

.

in_category()

, 我们设置category ID为 9, 该分类下面显示我博客里面所有关于网页设计的文章. 当用户点击这个分类下面的文章时, 自定义的样式表将使用到这些文章里面。

这仅仅是个简单的示例,你还可以使用更多的条件语句来为不同的类别指定不同的样式和内容,下面是一个示例:

<?php
$post = $wp_query->post;
if ( in_category('9') ) {
include(TEMPLATEPATH . '/single9.php');
elseif ( in_category('12') ) {
include(TEMPLATEPATH . '/single12.php');
elseif ( in_category('42') {
include(TEMPLATEPATH . '/single42.php');
} else {
include(TEMPLATEPATH . '/single1.php');
} }
?>

在我的两个复制“single”的模板文件里面, 我都在顶部放置了提醒作用的注释代码,就像下面这样:

<!-- single 2 - for CSS Web Page Articles -->

因为我并不想都改变这两个模板文件, 而仅仅是添加额外的样式表到第二个也就是single2.php文件, 于是我创建两个header模板文件,

就像复制single.php那样

, 然后在第二个header文件的顶部添加上外部样式表的链接,像这样:

<style type="text/css" media="screen">
@import URL('/wp-content/themes/mytheme/style.css');
@import URL('/wp-content/themes/mytheme/cssstyles.css');
</style >

接着,就是要在第二个single2.php里面调用

header2.php

:

<?php
/* Don’t remove this line. */
require('./wp-blog-header.php');
include(get_template_directory() . '/header2.php'
?>

原文: Creating Multiple Single Posts for Different Categories

翻译: 帕兰映像

OK。这样差不多了,如果有还不明白的朋友可以提出来,我再补充。唉。这个原作者有点烦,口水话一大堆。

“精通WordPress主题-3: 为不同的分类日志设置不同的样式”的27个回复

  1. 今天在修改一个主题的时候发现没有single.php。。。请问如果没有single.php那么日志页面的布局是根据什么读取的呢?

  2. 这是给自定义分类新建一个页面。
    能不能在首页实现不同分类的文章显示的效果也不一样?如 花儿开了的博客。

  3. 你好,请问 更多的条件语句来为不同的类别指定不同的样式和内容 这句话下面写的php代码是不是错了,我放上去,显示代码错误… 郁闷中了,elseif前面 的} 需要加不加呢?

  4. 很不错的文章,但是我觉得产生两个header不算合理。能不能在header中用 if else 的方式来实现加载不同的css文件…..

    请博主指教! 😉

  5. 还一种方法…不知道是否可行。。就是不要其实的步骤。。。直接在header做一个判断…让某一个分类用另一个css….

    当然这样可能只能单纯的从样式上更改….功能上可能不能改变啦。

    😉 “因为我并不想都改变这两个模板文件, 而仅仅是添加额外的样式表到第二个也就是single2.php文件, 于是我创建两个header模板文件”;-) 这样的做法貌假也只能实现样式上的改变。而不是功能!

  6. post;
    if ( in_category(‘9’) ) {
    include(TEMPLATEPATH . ‘/single9.php’);
    elseif ( in_category(’12’) ) {
    include(TEMPLATEPATH . ‘/single12.php’);
    elseif ( in_category(’42’) {
    include(TEMPLATEPATH . ‘/single42.php’);
    } else {
    include(TEMPLATEPATH . ‘/single1.php’);
    } }
    ?>

    这段代码,没有作用啊~~~ :mrgreen:

  7. 我用了您的方法,但是不管我的cat的值,显示都是判断结果为假的那个single.php
    post;
    if(in_category(‘5’)){
    include(TEMPLATEPATH . ‘/single2.php’);
    }
    else{
    include(TEMPLATEPATH . ‘/single1.php’);
    }
    ?>不管是那个分类下的
    都显示的是single2的样式

发表评论

电子邮件地址不会被公开。 必填项已用*标注