wordpress根据文章分类调用不同文章模板的几种方法
方法一
第一步:建立一个single.php
文件,如果你的模板目录已经有这个文件,将 single.php
里面除了 get_header()
; get_footer()
; get_sidebar()
; 之外的所有内容改成
<?php if(in_category('article') { include(TEMPLATEPATH . '/single-article.php'); } else { include(TEMPLATEPATH . '/single-default.php'); } ?>
article
是wp
后台分类目录中分类的别名
上面代码的意思就是,判断文章是否属于article
的分类,如果是就调用single-article.php
的文章模板,默认调用article
的文章模板,否则就调用single-default.php
模板。
那么你根据自己的需要建立single-article.php
模板和single-default.php
模板就可以了!
方法二来自百度
第一步 :在 functions.php
文件添加如下代码:
//定义模板文件所在目录为 single 文件夹 define(SINGLE_PATH, TEMPLATEPATH . '/single'); //自动选择模板的函数 function wpdaxue_single_template($single) { global $wp_query, $post; //通过分类别名或ID选择模板文件 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样式,代码如下:
<?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样式呢?可以通过数组实现,以此类推,具体代码如下:
<?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实现,代码如下:
<?php if ( is_category(array(8,9,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文件里面的内容全部删除,并用下面的代码进行替换:
<?php if ( in_category(array(8,9,10)) ) { include(TEMPLATEPATH . '/single1.php'); } elseif ( in_category(array(1,2,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 文件写入下面的代码:
<?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、方法一如果要实现多个分类列表调用同一个列表模板样式,就需要创建多个文件,显然不方便。强烈推荐方法二!!!
2、分类页判断分类用is_category()
, 内容页判断分类需用in_category()
。