您想要的答案在代码中。意思是,你需要去探索。
您的搜索应以wp-includes/template-loader.php
. 这是WordPress在加载主题get之前包含的最后一个文件。它通过一系列条件来检查我们输出的是哪种类型的页面以及要获取的模板。
相关(冒犯?)行:
<?php
elseif ( is_single() && $template = get_single_template() ) :
现在我们知道了
get_single_template
获取单个帖子的模板,我们可以在
wp-includes/template.php
.
<?php
/**
* Retrieve path of single template in current or parent template.
*
* @since 1.5.0
*
* @return string
*/
function get_single_template() {
$object = get_queried_object();
$templates = array();
$templates[] = "single-{$object->post_type}.php";
$templates[] = "single.php";
return get_query_template( \'single\', $templates );
}
还没有过滤器,但您开始了解WP是如何定位模板的。现在我们需要看看
get_query_template
是的(
get_query_template
也在
wp-includes/template.php
).
<?php
/**
* Retrieve path to a template
*
* Used to quickly retrieve the path of a template without including the file
* extension. It will also check the parent theme, if the file exists, with
* the use of {@link locate_template()}. Allows for more generic template location
* without the use of the other get_*_template() functions.
*
* @since 1.5.0
*
* @param string $type Filename without extension.
* @param array $templates An optional list of template candidates
* @return string Full path to file.
*/
function get_query_template( $type, $templates = array() ) {
$type = preg_replace( \'|[^a-z0-9-]+|\', \'\', $type );
if ( empty( $templates ) )
$templates = array("{$type}.php");
return apply_filters( "{$type}_template", locate_template( $templates ) );
}
第一个参数是我们要定位的模板类型(
single
第二个是一系列要搜索的模板。这就是我们停下来的地方。
locate_template
只需在子主题目录和父主题目录中搜索
$templates
数组——如果找到文件路径,则返回文件路径;如果找不到,则返回空字符串。
请注意$type
此函数中的“single”。
我写了以上所有内容,所以我可以告诉你过滤器仍然single_template
. 实际字符串single_template
在源中找不到,但筛选器仍然存在(和it works).