WordPress不同分类使用不同的文章模板

方法一:根据模板文件名进行判断

1.将下面的代码添加到当前主题的 functions.php 文件:

  1. /**
    * 不同分类使用不同的文章模板
    * From http://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 ,可以这样写

  1. in_category(2)

如果是单个分类别名,比如别名为 themes,可以这样写

  1. in_category(‘themes‘)

如果是多个ID,可以这样写

  1. in_category( array( 2,3,7) )

如果是多个别名,可以这样写

  1. 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 文件写入下面的代码:

  1. <?php
    if ( in_category(array( 2,3 )) ) {
        get_template_part(‘single001‘ );
    } elseif ( in_category( 7 )) {
        get_template_part(‘single002‘ );
    } else {
        get_template_part(‘single003‘ );
    }
    ?>

好了,例子就说到这里,只要大家明白了其中的原理,就可以应用自如了。

时间: 2024-08-28 14:15:07

WordPress不同分类使用不同的文章模板的相关文章

Wordpress不同分类调用不同的模板

这里指的是默认文章类型的模板(single.php,category.php) 应用场景: 默认文章默认有2个大类(新闻资讯.游戏资料) 新闻资讯下的所有子分类调用"新闻资讯列表模板,新闻内容模板" 游戏资料下的所有子分类调用"游戏资料列表模板,游戏资料内容模板" 文章列表页category.php 在category.php做判断 如果该子分类属于"新闻资讯根分类",则调用新闻资讯列表模板 如果该子分类属于"游戏资料根分类"

Zzzj Submit:WordPress 百度熊掌号/原创保护文章数据推送插件 V3.4

Zzzj Submit:WordPress 百度熊掌号/原创保护文章数据推送插件 V3.4 Zzzj Submit是一款根据百度站长平台原创保护提交接口而升级开发的WordPress插件,目前插件已经开始适配百度熊掌号(原百度官方号)的数据提交内测,可实现用户自动自主的将文章推送至官方号及原创保护文章推送,支持定时文章推送. 即日起"Zzzj Submit"插件将从WordPress百度原创保护提交插件升级为WordPress百度熊掌号数据提交插件,由于百度熊掌号目前属于内测期间,故该

wordpress通过$wpdb获取一个分类下所有的文章

在wordpress程序根目录下新建一个php文件,粘贴下面的代码 如下面的代码注释,修改$CID这个分类id,就可以获取这个分类下的文章了.这个查询需要联合三个表wp_posts.wp_term_relationships.wp_term_taxonomy, 根据term_taxonomy_id获取文章标号,post_status = ‘publish’ 是指文章已经发布,post_type=’post’ 是指记录类型是文章,taxonomy = ‘category’ 是指类型是目录. 然后运

如何实现WordPress不同分类则每页显示不同数量的文章

有时我们需要让wordpress不同的分类显示不同数量的文章并分页,比如资讯的分类页显示20篇并分页,教程的分类页显示10篇并分页,要如何实现呢?随ytkah一起来看看吧!把下面的代码加入当前主题的function.php文件中 function filter_pre_get_posts( $query ){ if ( $query->is_main_query() ){ $num = ''; if ( is_category(array(9)) ){ $num = 14; } //if ( i

wordpress按分类获取文章上下页

上一页 <?php $prev_post = get_previous_post(true); if (!empty( $prev_post )): ?> <a href="<?php echo get_permalink( $prev_post->ID ); ?>"></a> <?php endif; ?> 下一页 <?php $next_post = get_next_post(true); if (!empt

分类数据到文章模板

public function flcx(){ header("Content-type:text/html;charset=utf-8");//utf8编码 $id = $_GET['id'];//接收id $Dao = M();//用原生sql查询 $sql = "SELECT xp_wztj.bt,xp_wztj.time,xp_wztj.gjz,xp_wztj.wz,xp_wzfl.name FROM xp_wztj, xp_wzfl WHERE xp_wztj.ui

wordpress文章页获取指定分类的置顶文章

<dl> <dt><span>置顶</span>推荐</dt> <?php              query_posts('cat=28&posts_per_page=1'); while (have_posts()) : the_post();       if (is_sticky()): //输出置顶文章 ?> <dd> <p class="rList_title"><

wordpress对显示某分类目录的文章列表页时对单个文章显示字数限制和省略

wordpress会在对应的此类列表页面模板中,遍历输出每篇文章的信息,缩略图,作者,正文,标题等, 输出具体的正文的部分 使用这样一句 <?php the_content(''); ?> 默认通过在页面调用这个函数将完整输出wordpress的正文 但是如果我们需要在一个显示某分类的全部文章的页面中,不输出全部的单个文章的正文呢,这种需求很常见,我们让它在其下显示一个按钮,链到单独文章的详情页去 首先可以使用 <!--more--> 标签,在编辑 单独的每个文章时, 编辑器上的功

ecshop怎么全局调用指定文章二级分类(注意是文章分类不是二级商品分类)

1.直接将以下代码复制到要显示的模板,修改所需文章分类id,其中 {if $cat.id eq 16}的意思是调用文章分类ID为16下的二级文章分类     <? $GLOBALS['smarty']->assign('article_categories',   article_categories_tree(0)); //文章分类树 ?> <!--{foreach from=$article_categories item=cat}-->     {if $cat.id