如何使用GET_TEMPLATE_PART()?

时间:2011-02-21 作者:Amit Erandole

有人能给我解释一下这个功能是如何工作的吗?我知道它是做什么的,但当我查看二十个模板中的源代码时,我不知道如何将所有循环收集到一个循环中。php(我也看到了该文件)。

例如,如何抽象出模板的某个公共部分,然后跨其他模板重用它呢?

3 个回复
最合适的回答,由SO网友:goldenapples 整理而成

这里有一些非常好的介绍性答案。

大体上get_template_part() 允许主题开发人员设置模板文件的特定顺序。当它应用于CSS选择器时,可以将其类似于专用性。在设计某样东西时,您希望从最低限度的特殊性开始,以便在设计中需要单独注意的部分可以轻松地覆盖它。

例如,你在设计一个博客的样式,你创建了一个loop.php 可以很好地标记职位的文件。但您需要提前计划,然后在模板文件中使用其他上下文说明符调用它-例如,在索引页上,您可以调用get_template_part( \'loop\', \'index\' );, 在单个模板上,您可以调用get_template_part( \'loop\', \'single\' );, 在存档页面上,您可以调用get_template_part( \'loop\', \'archive\' );, 等等当您决定在归档页面上标记不同于主页的循环时,这将非常容易:只需创建一个loop-archive.php 模板,将使用它,而不是泛型loop.php.

但背后的魔力get_template_part() 在函数中locate_template(), 它首先检查主题目录,然后检查名为的文件的父目录(如果存在)。这对于插件开发非常有用。在我的一个插件中,我定义了一个自定义帖子类型,并在插件目录中为该自定义帖子类型创建了一个循环模板文件。但是我想允许使用我的插件的主题覆盖我的标记,如果他们选择的话。这就是locate_template() 真的很神奇。

locate_template($template_names, $load = false, $require_once = true )
将在样式表目录中的$template\\u names数组中查找每个名称,然后在模板目录中查找。将“true”作为$load参数传递意味着它将需要找到的第一个文件,如果没有找到模板文件,则返回空字符串。因此,我可以在插件中执行以下操作:

if ( \'\' === locate_template( \'loop-mycustomposttype.php\', true, false ) )
    include( \'loop-mycustomposttype.php\' );
。。。这应该可以让主题开发人员通过包含一个名为loop-mycustomposttype.php 在他们的主题中。

SO网友:wyrfel

不是所有循环,而是主循环。;-)无论您查看frontpage或某个类别或谁知道什么,您都会有一个主循环。该主循环的内容由在调用模板之前运行的查询决定。

循环。php模板只运行在循环中的项目上并格式化它们。看见the documentation at the Codex.

如果你看二十个十的环。php中,您可以看到,然后在该单个模板文件中实现多样化。

get_template_part() 只需加载一个模板部件并在其中运行即可。您也可以提取部分循环。将php转换为单独的文件,并用get_template_part(\'loop\', \'category\') 等等电话。

或者,您可以为循环中的每个帖子创建一个部件模板,并创建循环。仅php调用get_template_part(\'loop\',\'post\');while... 条款一切取决于你。

SO网友:icc97

get_template_part codex:

<?php get_template_part( \'loop\', \'index\' ); ?>

将对存在的第一个文件执行PHP require()。。。

它的工作效率非常高,就像您需要另一个php文件一样。

Update: “require”与“require”略有不同,它被包装在一个函数中,因此您必须global 如果要将任何变量从模板传递到模板部件。

结束

相关推荐