问题描述
我想知道有没有办法用文件夹使用 get_template_part()?我的主文件夹现在有很多文件,因为我把每个 re-usable 元素放在一个单独的文件中。我想把它们放在文件夹中。
没有关于食品法典的信息:http://codex.wordpress.org/Function_Reference/get_template_part
最佳解决方案
其实你可以,我有一个文件夹在我的主题目录/partials/
在那个文件夹我有文件如 latest-articles.php
,latest-news.php
和 latest-statements.php
和我加载这些文件使用 get_template_part()
像:
get_template_part('partials/latest', 'news');
get_template_part('partials/latest', 'articles');
get_template_part('partials/latest', 'statements');
不要忘了从文件名中省略.php
。
次佳解决方案
恐怕不是。如果在 codex 中不是您想要知道的内容,请尝试遵循源代码链接,并查看代码,并尝试管理它。
我看了一下,get_template_part 功能定义如下:
function get_template_part( $slug, $name = null ) {
do_action( "get_template_part_{$slug}", $slug, $name );
$templates = array();
if ( isset($name) )
$templates[] = "{$slug}-{$name}.php";
$templates[] = "{$slug}.php";
locate_template($templates, true, false);
}
从中可以看出,get_template_part 功能只是创建一个预期的 php 文件名,并调用函数 locate_template 。这没有用,所以我也看了一下 locate_template 的功能:
function locate_template($template_names, $load = false, $require_once = true ) {
$located = '';
foreach ( (array) $template_names as $template_name ) {
if ( !$template_name )
continue;
if ( file_exists(STYLESHEETPATH . '/' . $template_name)) {
$located = STYLESHEETPATH . '/' . $template_name;
break;
} else if ( file_exists(TEMPLATEPATH . '/' . $template_name) ) {
$located = TEMPLATEPATH . '/' . $template_name;
break;
}
}
if ( $load && '' != $located )
load_template( $located, $require_once );
return $located;
}
找到从 get_template_part 调用的 php 文件的定位模板搜索。但是你可以直接从你的代码中调用 locate_template 。这是有用的。
尝试这个代码,而不是 get_template_part(‘loop-sigle.php’) 函数 (您的文件位于您的主题中的 mydir):
locate_template( 'mydir/loop-single.php', true, true );
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。