有人可以向我解释此功能的工作原理吗?我知道它的作用,但是当我查看二十个模板中的源代码时,我不知道如何在一个单独的loop.php中收集所有循环(我也看到了该文件)。
那么,例如,如何抽象出模板的某个公共部分,然后在其他模板之间重用呢?
有人可以向我解释此功能的工作原理吗?我知道它的作用,但是当我查看二十个模板中的源代码时,我不知道如何在一个单独的loop.php中收集所有循环(我也看到了该文件)。
那么,例如,如何抽象出模板的某个公共部分,然后在其他模板之间重用呢?
Answers:
这里有一些非常好的介绍性答案。
基本上,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_names数组中,然后在模板目录中寻找每个名称。传递'true'作为$ load参数意味着它将需要找到的第一个文件,如果未找到模板文件,则将返回一个空字符串。因此,我可以在插件中执行以下操作:
if ( '' === locate_template( 'loop-mycustomposttype.php', true, false ) )
include( 'loop-mycustomposttype.php' );
...这应该使主题开发人员只需在主题中包含一个名为loop-mycustomposttype.php的文件即可轻松定制我的插件。
include(locate_template( 'loop-mycustomposttype.php'))
这样可以传递变量。我在这里找到了此链接。这非常有用!
if ( false === include(locate_template( 'loop-mycustomposttype.php')) )
require
or require_once
调用(来自locate_template
)位于函数内部,因此无法访问当前作用域。
并非所有循环,主循环。;-)无论您查看首页还是类别,或者知道什么,总会有一个主循环。该主循环的内容由根本未调用模板之前运行的查询确定。
loop.php模板仅运行循环中的项目并设置其格式。请参阅食典文件。
如果您看二十多岁的loop.php,您会发现二十多岁然后在单个模板文件中多样化。
get_template_part()
只需加载一个模板零件并运行它。您也可以将loop.php的一部分提取到单独的文件中,并用a get_template_part('loop', 'category')
等等替换它们。
或者,您可以为循环中的每个帖子提供一个部分模板,并使loop.php仅get_template_part('loop','post');
在while...
子句中调用。都由你定。
<?php get_template_part( 'loop', 'index' ); ?>
将对存在的第一个文件执行PHP require()...
如此有效地工作,就好像您需要另一个php文件一样。
更新:'require'略有不同-它包装在一个函数中,因此global
如果要将任何变量从模板传递到模板部件,则必须这样做。