乌徒帮技术范WordPressWordPress开发 › 不同分类的文章使用不同的模板,重构文章模板选择路由

不同分类的文章使用不同的模板,重构文章模板选择路由

分类:WordPress开发

在我们的一些开发中,我们渴望为文章使用不同模板,而且这些模板我们是可以自己控制的。很幸运的是,wordpress提供了一些hook,以帮助我们完成文章模板选择路由的重构,让我们不必担心模板选择是无法控制的。而本文,我们以实现不同分类的文章使用不同的模板作为简单案例,以此来探讨这一功能所涉及到的wordpress核心机制。

首先让我们回顾wordpress本身的模板选择路由,在这篇文章中,我们引用了官方的说明,并有一张官方提供的路由图片以形象的解释它。虽然WP已经提供了为数不少的模板选择,但到实际场合中,发现有些是多余,但有些确不够用,因此我们只能通过程序来调整它,以达到我们的模板使用目的。

首先,我们应该大致了解到的是,我们可以使用hook来实现这些功能,目前WP中文界对此的探讨比较少,而如果用英文在谷歌进行template_redirect的搜索,可以发现很多这方面的探讨。涉及到的hook:template_redirect、template_include、{$type}_template,虽然提供了single_template但官方提示已经在WP3.3之后放弃使用了。而涉及到的函数locate_template、get_query_template。我们可知的是可以使用add_action、add_filter来使之生效。我们可以参考的,有 1 2 这两个网页中使用到的方法,我就是从中获得启发而写下了稍后要公布的代码。

那么接下来我们来看看如何实现不同分类的文章使用不同的模板。

其实我们的目标是重构文章(single)模板的选择,因此,我们实际要改变的是single_template,但不幸的是如上文所述,single_template的hook被放弃了,因此我们只能重新构造。在构造之前,我们需要了解wordpress模板选择,以确定single页面的模板可能情况,不至于漏掉。最后就是公布代码了:

function filter_single_template(){
    if(is_single()) :
		global $post;

		$cat = wp_get_post_categories($post->ID);
		$cat = $cat[0];
		$cat = get_category($cat)->slug;

		$templates = array(
			"single-{$post->post_type}.php",
			"single-{$cat}.php",
			"single.php",
			"index.php"
		);

		include(get_query_template('single',$templates));
		exit;
    endif;
}
add_action('template_redirect','filter_single_template');

基于上述的代码,构造不同标签的文章使用不同的模板,根据文章的别名使用对应的模板,根据文章的ID号使用对应的模板等就显得非常的容易了。为了害死你的脑细胞,这里就不多赘述了。

填写个人信息,赶快回复吧!