在我看来,这两种方式都为最终用户提供了修改主题而不实际编辑主题文件(通过子主题)的机会。
我的问题是,一种方法比另一种更可取。
举个例子,我现在正在研究一个主题。我正试图决定是否与模板部分挂钩。
<?php get_template_part('before_sitecontainer' ); ?>
<div id="sitecontainer" class="sitecontainer" <?php //closed in footer ?>>
<?php get_template_part( 'before_topcontainer' ); ?>
<div id="topcontainer ">
<?php get_template_part( 'before_topedge_navigation' ); ?>
<?php get_template_part( 'topedge_navigation' ); ?>
<?php get_template_part( 'before_site_header' ); ?>
<?php get_template_part( 'site_header' ); ?>
<?php get_template_part( 'before_second_navigation' ); ?>
<?php get_template_part( 'second_navigation' ); ?>
<?php get_template_part( 'after_second_navigation' ); ?>
</div><!-- end topcontainer div -->
<?php get_template_part( 'after_topcontainer' ); ?>以上允许主题的用户替换现有代码的任何部分,只需在其子主题文件夹中创建一个近似命名的文件,以及使用相同的方法在每个预先存在的部分之前/之后添加新代码--在父主题中根本不存在“前/后”模板部件文件,并且只允许他们插入代码--而且该方法不要求他们理解钩子/过滤器才能完成这一任务。
当然,我也可以用钩子和过滤器实现同样的目标。
使用钩子/过滤器有什么好处吗?记住,将使用这一技术的目标受众显然不懂代码。我可以给他们相对基本的指导,他们可以遵循使用模板方法,但几乎肯定会混淆他们的魔鬼和钩子。
还是在同一主题中,其中一种比另一种更好?
发布于 2010-10-19 06:48:00
我更喜欢钩子,因为它们更灵活:您可以从主题的functions.php文件,也可以从插件连接到它们。我试图在插件中加入同样多的逻辑,这样主题就包含了大部分布局内容。
如果使用动作钩子,仍然可以在该钩子处理程序中使用get_template_part()。这给了你最好的两个世界。您甚至可以创建一个调用get_template_part()的默认钩子,这样没有多少编码经验的人就可以添加额外的文件,其他人也可以删除这个钩子,如果他们不愿意的话。
关于性能:get_template_part()使用(在……里面locate_template()) file_exists()一次、两次或四次(取决于您如何称呼它)。它看起来像file_exists()是非常快的和在中使用缓存,甚至在操作系统中也是如此。因此,这可能不是一个问题。
发布于 2010-10-18 09:28:17
我想说的是,主要的区别是可读性。如果您看到几个命名良好的模板部件,您可以轻松地掌握正在发生的事情。如果您只是看到一个钩子,您将需要搜索主题的其余部分,以确定什么是附加到钩子。
发布于 2010-10-18 09:41:14
在子主题中从钩子主题中删除函数(相对来说)比较容易,但要使它忽略不需要的父模板要困难得多。
本质上,使用钩子更接近PHP端,使用模板更接近HTML端。我使用混合父母的主题,这是非常挂钩的。这是一个幸福的权利,直到你需要摆脱一些家长的模板。
对于那些不懂技术的用户来说,这也是一个非常好的选择。他们为什么要搅乱这样的主题内部呢?
PS还注意到性能问题。带有钩子的东西会发生在内存中,而带有模板的东西需要大量的磁盘查找。特别是当你在你的例子中写类似的东西的时候。
不是每个人都喜欢..。但是,为什么不从头开始编写父主题,而不使用现有的父主题并向用户提供简单的子主题?
https://wordpress.stackexchange.com/questions/2988
复制相似问题