当前浏览:首页 / WordPress函数 / locate_template()

locate_template( string|array $template_names, bool $load = false, bool $require_once = true, array $args = array() )

检索存在的最高优先级模板文件的名称

templatemore...


描述

在TEMPLATEPATH和wp-includes/theme-compat之前的样式表路径中搜索,以便从父主题继承的主题可以只重载一个文件。


参数

$template_names

(string|array)(必填) 要按顺序搜索的模板文件。

$load

(bool)(可选) 如果为true,则在找到模板文件时将加载该模板文件。

默认值: false

$require_once

(bool)(可选) 是require_once还是require。如果$load为false,则无效。

默认值: true

$args

(array)(可选) 传递给模板的其他参数。

默认值: array()


返回

(string) 模板文件名(如果有)。



源码

查看源码 官方文档


更新日志

版本描述
5.5.0已添加$args参数。
2.7.0开始引入

用户贡献的笔记

  • 贡献者:Paul Ryan

    请注意,locate_template()不阻止目录遍历攻击,因此如果要将用户提供的模板名称传递给函数,请确保它来自三个适当位置之一(启用的主题目录、父主题目录或/wp-includes/theme-compat/目录)。

    例子:

    $template = locate_template( $template_filename_from_unsanitized_user_input );
    
    // Only allow templates that are in the active theme directory, parent theme
    // directory, or the /wp-includes/theme-compat/ directory (prevent directory 
    // traversal attacks).
    $template_in_theme_or_parent_theme_or_compat = (
    	// Template is in current theme folder.
    	0 === strpos( realpath( $template ), realpath( STYLESHEETPATH ) ) ||
    	// Template is in current or parent theme folder.
    	0 === strpos( realpath( $template ), realpath( TEMPLATEPATH ) ) ||
    	// Template is in theme-compat folder.
    	0 === strpos( realpath( $template ), realpath( ABSPATH . WPINC . '/theme-compat/' ) )
    );
    
    if ( $template_in_theme_or_parent_theme_or_compat ) {
    	require_once( $template );
    }
  • 贡献者:Codex

    示例
    基于当前页面名加载特定模板部分。

    if (locate_template('content-' . $pageName . '.php') != '') {
    	// yep, load the page template
    	get_template_part('content', $pageName);
    } else {
    	// nope, load the content
    	the_content();
    }