2017-09-21

猎数博客

数据挖掘,机器学习

WordPress之template-loader

作者:江航 / 2011-05-15 / (阅读 1,825 次) /



接着上一回的WordPress index.php (二),上次说到了template-loader.php ,但是没有具体去看各个模板是怎么被装进来的,今天来看一下。

找到了WordPress所有的源码所在地,template-loader.php源码在这里 , 因此我就不在贴源码上来了。大家可以打开这个页面对这看。

第六行到第19行先不看,直接看下面的模板选择过程。

23到41行中首先判断需要浏览的页面是什么页面,是home, single, date, author等等类型,决定类型后通过get_*_template() 函数来找到模板所在的地方,然后读进模板。

作为一个例子,我们看看get_404_template() 。

这个函数定义在wp-includes/theme.php中。

get_404_template实际上只是调用了函数get_query_template(‘404’)。

下面看get_query_template($type,$tempaltes=array())干了些什么。这里第二个参数为空,只传进了“404”参数。然后调用一个filter

apply_filters( “{$type}_template”, locate_template( $templates ) )

如果把参数都放进去,那么就是

apply_filters( “404_template”, locate_template( array(“404.php”) ) )

首先需要知道locate_template(array(“404.php”))干什么了,这个函数定义在1073行。对于传进来的每个tempalte_name,这里是404.php,首先在STYLESHEETPATH 下看有没有,如果没有就到TEMPLATEPATH下去找,找到之后,对这个文件调用load_template。

load_template函数只是简单的把这个php文件require进来。但是在函数的开头,声明了N多global变量,还检测了一下$wp_query->query_vars变量。看函数说明好像是只是检测以下而已。然后把找到的php文件require进来。

现在404.php已经被load进来了,接下来看有没有404_template的filter声明过,如果有就调用下,我查我的目录,这个filter没有申明过,因此不会作额外的事情。

至此404.php已经被load进来。先回到template-loader.php.

看42行

42

if ( $template = apply_filters( ‘template_include’, $template ) )

43

include( $template );

调用filter template_include 。 如果返回的模板为他本身,就再include一次。有点奇怪这里,我在我的Wordpress目录里查了下,template_include filter是没有定义的,因此42,43行实际上什么也没做。

最后看一下,判断当前页面的那些函数,比如说is_404:
这些函数定义在wp-includes/query.php
这些判断都是通过全局变量wp_query来处理。在查询处理过程中,会知道当前应该是什么页面。因此,后面可以仔细看看query.php这个文件,看看整个查询过程是怎样的。还有就是后面的具体每个template是怎么样来显示数据的。



Wordpress一览无余,源码面前没有秘密,wordpress的函数调用库,展示wordpress页面打开过程中十几万个函数调用,学习WP开发的绝佳资源。点击这里进入

本文地址: http://www.bagualu.net/wordpress/archives/464 转载请注明






相关文章

  • 再说Wordpress中添加小挂件widget( 5,869 )
  • Wordpress中添加自定义参数( 3,413 )
  • WordPress代码之apply_filters( 3,274 )
  • 微博分享按钮( 3,227 )
  • WordPress版权声明插件( 3,199 )
  • wordpress函数调用库( 2,634 )
  • 通过wpdb访问WordPress数据库( 2,444 )
  • 通过wordpress debug插件,显示filter调用过程( 2,405 )
  • 用Wordpress做相册( 2,398 )
  • WordPress 代码之 add_filter( 2,338 )
  • Leave a Reply

    您必须登录以发表评论,

    沪ICP备11036560号
    联系我: jianghang at bagualu.net