假如你做了一个个人WP博客,里面有几个分类,比如技术类,日记类,图片类,你又不想让这些文章使用同一个模板,那么下面的文章对你有帮助,网上介绍了很多方法,通过小编测试,以下方法较为通用,你完全放心尝试。当然下面的文章还介绍了调用不同的分类文章列表,其实最主要的是函数:is_category(), in_category()的使用技巧。
根据分类别名调用不同的文章模板
方法一
第一步:建立一个single.PHP文件,如果你的模板目录已经有这个文件,将 single.PHP 里面除了 get_header(); get_footer(); get_sidebar(); 之外的所有内容改成
if(in_category('article') {
include(TEMPLATEPATH . '/single-article.PHP');
}
else {
include(TEMPLATEPATH . '/single-default.PHP');
}
?>
上面代码的意思就是,判断文章是否属于article的分类,如果是就调用single-article.PHP的文章模板,默认调用article的文章模板,否则就调用single-default.PHP模板。
那么你根据自己的需要建立single-article.PHP模板和single-default.PHP模板就可以了!
第一步 :在 functions.PHP 文件添加如下代码:
define(SINGLE_PATH,TEMPLATEPATH . '/single');
function wpdaxue_single_template($single) {
global $wp_query,$post;
foreach((array)get_the_category() as $cat) :
if(file_exists(SINGLE_PATH . '/single-cat-' . $cat->slug . '.PHP'))
return SINGLE_PATH . '/single-cat-' . $cat->slug . '.PHP';
elseif(file_exists(SINGLE_PATH . '/single-cat-' . $cat->term_id . '.PHP'))
return SINGLE_PATH . '/single-cat-' . $cat->term_id . '.PHP';
endforeach;
}
//通过 single_template 钩子挂载函数
add_filter('single_template','wpdaxue_single_template');
第二:在当前主题的根目录创建一个名为 single 的文件夹,然后根据不同分类创建不同的文件,命名格式为 single-cat-[分类别名或ID].PHP。请记得为所有分类创建自己的模板文件。例如,那就可以命名为 single-cat-themes.PHP 或 single-cat-2.PHP 。这样,只要是wordpress主题这个分类,就会自动选择 single-cat-themes.PHP 或 single-cat-2.PHP 作为这个分类的文章模板。
判断分类ID调用不同分类列表模板样式:
关于wordpress分类的ID查看方法:wordpress后台无插件显示文章和分类ID
创建article_list.PHP(文章列表模板样式)、thumb_list.PHP(有缩略图的列表模板样式)和image_list.PHP(图集列表样式),然后创建一个archive.PHP文件,在archive.PHP中使用下面的代码实现不同的效果。
1)、要实现id为5的分类使用的是image_list.PHP样式,其余的使用article_list.PHP样式,代码如下:
if ( is_category(5) ) {
include(TEMPLATEPATH . '/image_list.PHP');
} else {
include(TEMPLATEPATH . '/article_list.PHP');
}
?>
2)、要实现id为8、9、10这三个分类都使用thumb_list.PHP样式,其余的使用article_list.PHP样式呢?可以通过数组实现,以此类推,具体代码如下:
if ( is_category(array(8,9,10)) ) {
include(TEMPLATEPATH . '/thumb_list.PHP');
}
else {
include(TEMPLATEPATH . '/article_list.PHP');
}
?>
3)、要实现id为8、9、10三个分类使用thumb_list.PHP样式,id为1、2、3的分类使用image_list.PHP样式,其余使用article_list.PHP样式,可以使用elseif实现,代码如下:
if ( is_category(array(8,10)) ) {
include(TEMPLATEPATH . '/thumb_list.PHP');
}
elseif ( is_category(array(1,2,3))){
include(TEMPLATEPATH . '/img_list.PHP');
}
else {
include(TEMPLATEPATH . '/title_list.PHP');
}
?>
wordpress不同分类下的文章使用不同文章样式:
wordpress不同分类下的文章使用不同文章模板样式实现的方法和上面说到的方法二的原理是一样的,只不过使用的函数不是is_category ,而是 in_category 。
例一:
同样我们要根据需要创建两个以上的文章模板样式,比如single1.PHP、single2.PHP和single3.PHP,然后在single.PHP通过in_category 判断代码来实现自己需要的效果。
比如要实现id为8、9、10三个分类下的文章使用single1.PHP样式,id为1、2、3的分类下的文章使用single2.PHP样式,其余使用single3.PHP样式!首先,复制三个single.PHP文件分别取名为“single1.PHP”、“single2.PHP”和“single3.PHP”,然后,把原先的single.PHP文件里面的内容全部删除,并用下面的代码进行替换:
if ( in_category(array(8,10)) ) {
include(TEMPLATEPATH . '/single1.PHP');
}
elseif ( in_category(array(1,3))){
include(TEMPLATEPATH . '/single2.PHP');
}
else {
include(TEMPLATEPATH . '/single3.PHP');
}
?>
例二:
在主题的根目录创建3个文章模板文件,分别命名为 single001.PHP,single002.PHP 和 single003.PHP,然后我们希望 ID 为 2 和 3 的分类使用 single001.PHP,ID为 7 的分类使用 single002.PHP ,其他分类使用 single003.PHP,那么,我们可以在 single.PHP 文件写入下面的代码:
if ( in_category(array( 2,3 )) ) {
get_template_part('single001' );
} elseif ( in_category( 7 )) {
get_template_part('single002' );
} else {
get_template_part('single003' );
}
?>
总结
1、方法一如果要实现多个分类列表调用同一个列表模板样式,就需要创建多个文件,显然不方便。强烈推荐方法二!!!