本文目录[隐藏]
- 1方法一:根据模板文件名进行判断
- 2方法二:使用 in_category() 进行判断
挖鱼源码网昨天分享的 Custom Post Template 和 Single Post Template 可以让你自定义每篇文章的文章模板,今天来说说WordPress不同分类使用不同的文章模板。
方法一:根据模板文件名进行判断
1.将下面的代码添加到当前主题的 functions.php 文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
<span style="color: #009933; font-style: italic;">/** * 不同分类使用不同的文章模板 * From https://www.wpdaxue.com/custom-single-post-template.html */</span> <span style="color: #666666; font-style: italic;">//定义模板文件所在目录为 single 文件夹</span> <span style="color: #990000;">define</span><span style="color: #009900;">(</span>SINGLE_PATH<span style="color: #339933;">,</span> TEMPLATEPATH <span style="color: #339933;">.</span> <span style="color: #0000ff;">'/single'</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//自动选择模板的函数</span> <span style="color: #000000; font-weight: bold;">function</span> wpdaxue_single_template<span style="color: #009900;">(</span><span style="color: #000088;">$single</span><span style="color: #009900;">)</span> <span style="color: #009900;">{</span> <span style="color: #000000; font-weight: bold;">global</span> <span style="color: #000088;">$wp_query</span><span style="color: #339933;">,</span> <span style="color: #000088;">$post</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//通过分类别名或ID选择模板文件</span> <span style="color: #b1b100;">foreach</span><span style="color: #009900;">(</span><span style="color: #009900;">(</span><span style="color: #990000;">array</span><span style="color: #009900;">)</span>get_the_category<span style="color: #009900;">(</span><span style="color: #009900;">)</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$cat</span><span style="color: #009900;">)</span> <span style="color: #339933;">:</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">(</span><span style="color: #990000;">file_exists</span><span style="color: #009900;">(</span>SINGLE_PATH <span style="color: #339933;">.</span> <span style="color: #0000ff;">'/single-cat-'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$cat</span><span style="color: #339933;">-></span><span style="color: #004000;">slug</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'.php'</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span> <span style="color: #b1b100;">return</span> SINGLE_PATH <span style="color: #339933;">.</span> <span style="color: #0000ff;">'/single-cat-'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$cat</span><span style="color: #339933;">-></span><span style="color: #004000;">slug</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'.php'</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">elseif</span><span style="color: #009900;">(</span><span style="color: #990000;">file_exists</span><span style="color: #009900;">(</span>SINGLE_PATH <span style="color: #339933;">.</span> <span style="color: #0000ff;">'/single-cat-'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$cat</span><span style="color: #339933;">-></span><span style="color: #004000;">term_id</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'.php'</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span> <span style="color: #b1b100;">return</span> SINGLE_PATH <span style="color: #339933;">.</span> <span style="color: #0000ff;">'/single-cat-'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$cat</span><span style="color: #339933;">-></span><span style="color: #004000;">term_id</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'.php'</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">endforeach</span><span style="color: #339933;">;</span> <span style="color: #009900;">}</span> <span style="color: #666666; font-style: italic;">//通过 single_template 钩子挂载函数</span> add_filter<span style="color: #009900;">(</span><span style="color: #0000ff;">'single_template'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'wpdaxue_single_template'</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> |
|
/**
* 不同分类使用不同的文章模板
* From https://www.wpdaxue.com/custom-single-post-template.html
*/
//定义模板文件所在目录为 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’);
2.在当前主题的根目录创建一个名为 single 的文件夹,然后根据不同分类创建不同的文件,命名格式为 single-cat-[分类别名或ID].php。请记得为所有分类创建自己的模板文件。

例如WordPress大学的”WordPress主题“这个分类的别名为”themes“,ID 为 2,那就可以命名为 single-cat-themes.php 或 single-cat-2.php 。这样,只要是WordPress主题这个分类,就会自动选择 single-cat-themes.php 或 single-cat-2.php 作为这个分类的文章模板。
方法二:使用 in_category() 进行判断
in_category() 函数可以通过分类别名或ID判断当前文章所属的分类,而且可以直接在循环(Loop)内部和外部使用。
如果是单个分类 ID ,比如ID 为 2 ,可以这样写
|
|
in_category<span style="color: #009900;">(</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span> |
|
in_category(2)
如果是单个分类别名,比如别名为 themes,可以这样写
|
|
in_category<span style="color: #009900;">(</span><span style="color: #0000ff;">'themes'</span><span style="color: #009900;">)</span> |
|
in_category(‘themes’)
如果是多个ID,可以这样写
|
|
in_category<span style="color: #009900;">(</span> <span style="color: #990000;">array</span><span style="color: #009900;">(</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">7</span><span style="color: #009900;">)</span> <span style="color: #009900;">)</span> |
|
in_category( array( 2,3,7) )
如果是多个别名,可以这样写
|
|
in_category<span style="color: #009900;">(</span> <span style="color: #990000;">array</span><span style="color: #009900;">(</span> <span style="color: #0000ff;">'themes'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'plugins'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'develop'</span><span style="color: #009900;">)</span> <span style="color: #009900;">)</span> |
|
in_category( array( ‘themes’,’plugins’,’develop’) )
然后我们结合 if 语句就可以很好地实现模板的选择。比如我们可以在主题的根目录创建3个文章模板文件,分别命名为 single001.php , single002.php 和 single003.php,然后我们希望 ID 为 2 和 3 的分类使用 single001.php,ID为 7 的分类使用 single002.php ,其他分类使用 single003.php,那么,我们可以在 single.php 文件写入下面的代码:
|
|
<span style="color: #000000; font-weight: bold;"><?php</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">(</span> in_category<span style="color: #009900;">(</span><span style="color: #990000;">array</span><span style="color: #009900;">(</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">3</span> <span style="color: #009900;">)</span><span style="color: #009900;">)</span> <span style="color: #009900;">)</span> <span style="color: #009900;">{</span> get_template_part<span style="color: #009900;">(</span><span style="color: #0000ff;">'single001'</span> <span style="color: #009900;">)</span><span style="color: #339933;">;</span> <span style="color: #009900;">}</span> <span style="color: #b1b100;">elseif</span> <span style="color: #009900;">(</span> in_category<span style="color: #009900;">(</span> <span style="color: #cc66cc;">7</span> <span style="color: #009900;">)</span><span style="color: #009900;">)</span> <span style="color: #009900;">{</span> get_template_part<span style="color: #009900;">(</span><span style="color: #0000ff;">'single002'</span> <span style="color: #009900;">)</span><span style="color: #339933;">;</span> <span style="color: #009900;">}</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">{</span> get_template_part<span style="color: #009900;">(</span><span style="color: #0000ff;">'single003'</span> <span style="color: #009900;">)</span><span style="color: #339933;">;</span> <span style="color: #009900;">}</span> <span style="color: #000000; font-weight: bold;">?></span> |
|
<?php
if ( in_category(array( 2,3 )) ) {
get_template_part(‘single001’ );
} elseif ( in_category( 7 )) {
get_template_part(‘single002’ );
} else {
get_template_part(‘single003’ );
}
?>
好了,例子就说到这里,只要大家明白了其中的原理,就可以应用自如了。
赏 如果本文对你有帮助,请打赏作者,鼓励我们继续写作!
请先
!