那么例如如何抽象出模板的某个公共部分,然后在其他模板之间重用呢?
#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
。
评论
尝试看看codex.wordpress.org/Function_Reference/get_template_part