Alan Hou的个人博客

WordPress中如何按照分类调取不同模板

默认的分类模板文件为category.php,但通常在开发中的需求不会这么简单

分类页面按按分类调取不同模板

如果想要不同分类调取不同分类的话,可以使用category加中间杠后接需使用该模板的分类Id号或别名(slug)来进行命名,如category-2.php或category-wordpress.php

也可以通过在category.php中通过判断id号来调用不同模板,比如

if ( is_category(array(1,2,3)) ) {
  include(TEMPLATEPATH . '/abc.php');
}else{
  include(TEMPLATEPATH . '/def.php');
}

上述方法可以还满足多个分类调用同一模板的需求,还有一种类似的方法,通过获取slug来调取对应的模板,如若模板不存在则调用默认的模板

$cat_ID = get_query_var('cat');
$cat = get_category($cat_ID);
$slug=$name = $cat->slug;
if ( '' !== locate_template( array("template-parts/category-$slug.php") ) ) {
  get_template_part( 'template-parts/category', $slug );
}else{
  get_template_part( 'template-parts/category', 'default');
}

以上代码可以精简为,因为在category-$slug.php不存在时,会自动调用该目录下的category.php

$cat_ID = get_query_var('cat');
$cat = get_category($cat_ID);
$slug=$name = $cat->slug;
get_template_part( 'template-parts/category', $slug );

文章页面按所属分类调取模板

很多时候我们需要分类下的文章页面根据不同分类使用不同的模板,类似地,我们可以通过in_category()函数来判断文章所属分类来调用不同模板,该函数中可以传入分类id,也可以使用分类别名(slug)

if ( in_category(array(1,2,3)) ) {
  include('template-parts/content-a.php');
}else {
  include('template-parts/content-b.php');
}

另外一种方法是根据所属分类别名来创建模板,如content-wordpress.php,不存在的直接调用content.php。不过这个方法存在一个问题,就是当文章属于多个分类时,需从数组中选择一个分类。

 $cat = get_the_category($post->ID); $slug = $cat[0]->slug; get_template_part('template-parts/content', $slug); 

独立页面调用不同模板

独立页面默认调用index.php作为模板,可通过新建page.php来作为独立页面模板。如果要单独为某一独立页面设置模板的话,可以在模板根目录中创建page-id.php,其中的id为该独立页面的id号。同样地,也可以采用页面别名page-slug.php的方式。

 

退出移动版