有人可以向我解释此功能的工作原理吗?我知道它的作用,但是当我查看二十岁十模板中的源代码时,我不了解如何在一个loop.php中收集所有循环(我也看到了该文件)。

那么例如如何抽象出模板的某个公共部分,然后在其他模板之间重用呢?

评论

尝试看看codex.wordpress.org/Function_Reference/get_template_part

#1 楼

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

基本上,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。 br />
但是get_template_part()的神奇之处在于函数locate_template(),该函数首先检查主题目录,然后检查父目录(如果存在)以查找命名的文件。这对于插件开发非常有用。在我的一个插件中,我定义了一个自定义帖子类型,并在我的插件目录中为此自定义帖子类型创建了一个循环模板文件。但是...我希望允许使用插件的主题覆盖我的标记(如果他们选择的话)。这是locate_template()真正起作用的地方。传递'true'作为$ load参数意味着它将需要找到的第一个文件,如果未找到模板文件,则将返回一个空字符串。因此,我可以在插件中执行以下操作:

locate_template($template_names, $load = false, $require_once = true )


...这有望使主题开发人员只需在其主题中包含一个名为loop-mycustomposttype.php的文件即可轻松定制我的插件。

评论


请以此替换locate_template。 include(locate_template('loop-mycustomposttype.php'))这种方式可以传递变量。我在这里找到了这个链接。这非常有用!

– Pablo S G Pacheco
2014年1月9日在0:52



这样做也有必要更改它。像这样if(false === include(locate_template('loop-mycustomposttype.php')))

– Pablo S G Pacheco
2014年1月9日在1:03

哦,好点。使用我给出的公式,require或require_once调用(来自locate_template)位于函数内部,因此无法访问当前作用域。

– Goldenapples
2014年1月10日在16:53

#2 楼

并非所有循环,主循环。 ;-)无论您查看首页还是类别,或者知道什么,您总会有一个主循环。主循环的内容由根本没有调用模板的查询决定。

loop.php模板仅运行循环中的项目并对其进行格式化。请参阅法典上的文档。

如果您查看二十年代的loop.php,您会发现二十年代然后在该单个模板文件中多样化。仅加载模板零件并运行它。您也可以将loop.php的一部分提取到单独的文件中,并用get_template_part()等调用替换它们。

或者您可以为循环中的每个帖子提供一个部分模板,让您的loop.php仅在get_template_part('loop', 'category')子句中调用get_template_part('loop','post');。一切由您决定。

#3 楼

从get_template_part编码中:


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

将对存在的第一个文件执行PHP require()。
如此有效,它将像您需要另一个php文件一样起作用。

更新:'require'略有不同-它包装在一个函数中,因此如果要将任何变量从模板传递到模板部件,则必须global