描述
在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 | 开始引入 |
使用示例
请注意,
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 ); }
示例
基于当前页面名加载特定模板部分。if (locate_template('content-' . $pageName . '.php') != '') { // yep, load the page template get_template_part('content', $pageName); } else { // nope, load the content the_content(); }