假如你做了一个个人wp博客,里面有几个分类,比如技术类,日记类,图片类,你又不想让这些文章使用同一个模板,那么下面的文章对你有帮助,网上介绍了很多方法,通过小编测试,以下方法较为通用,你完全放心尝试。当然下面的文章还介绍了调用不同的分类文章列表,其实最主要的是函数:is_category()
, in_category()
的使用技巧。
根据分类别名调用不同的文章模板
方法一
第一步:建立一个single.php
文件,如果你的模板目录已经有这个文件,将 single.php
里面除了 get_header(); get_footer(); get_sidebar(); 之外的所有内容改成
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
作为这个分类的文章模板。
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文件里面的内容全部删除,并用下面的代码进行替换:
例二:
在主题的根目录创建3个文章模板文件,分别命名为 single001.php , single002.php 和 single003.php,然后我们希望 id 为 2 和 3 的分类使用 single001.php,id为 7 的分类使用 single002.php ,其他分类使用 single003.php,那么,我们可以在 single.php 文件写入下面的代码:
总结
1、方法一如果要实现多个分类列表调用同一个列表模板样式,就需要创建多个文件,显然不方便。强烈推荐方法二!!!
2、分类页判断分类用is_category()
, 内容页判断分类需用in_category()
。