GET_TEMPLATE_PART与主题中的操作挂钩

时间:2010-10-18 作者:Ashley G

在我看来,这两者都为最终用户提供了修改主题的机会,而无需实际编辑主题文件(通过子主题)。

我的问题是,一种方法比另一种更可取吗。

例如,以我现在正在研究的主题为例。我正在尝试决定是否使用挂钩的模板部分。

<?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\' ); ?>
上述允许主题用户替换现有代码的任何部分,只需在其子主题文件夹中创建一个适当命名的文件,并使用相同的方法在每个预先存在的部分之前/之后添加新代码-父主题中根本不存在之前/之后的模板零件文件,而存在这些文件只是为了允许它们插入代码-此方法不存在要求他们了解挂钩/过滤器以实现这一点。

当然,我可以使用挂钩和过滤器实现同样的效果。

使用挂钩/过滤器是否有优势?请记住,将使用此功能的目标受众显然不是精通代码的人。我可以给他们相对基本的指导,他们可以遵循使用模板方法,但几乎肯定会用钩子把他们弄糊涂。

或者,在同一主题中,是否存在一个比另一个更好的情况?

3 个回复
SO网友:Jan Fabry

我更喜欢挂钩,因为它们更灵活:您可以从主题的functions.php 文件,但也来自插件。我尝试在插件中加入尽可能多的逻辑,以便主题主要包含布局内容。

如果使用动作挂钩,仍然可以使用get_template_part() 在那个钩子处理器中。这会让你两全其美。您甚至可以创建一个调用get_template_part(), 因此,没有太多编码经验的人可以添加额外的文件,如果其他人不想,也可以删除这个钩子。

关于性能:get_template_part() 使用(in locate_template()) file_exists() 一次、两次或四次(取决于你怎么称呼它)。它出现了file_exists() is very fast, 和uses caching in PHP 甚至可能在操作系统中。所以这可能不是问题。

SO网友:Mild Fuzz

我想说,主要区别在于可读性。如果您看到多个命名良好的模板部分,您可以轻松掌握发生的情况。如果您只看到一个钩子,则需要搜索主题的其余部分,以确定附加到钩子的内容。

SO网友:Rarst

It is (relatively) easy to remove function from hook in child theme, but much harder to make it ignore unwanted parent template.

Essentially working with hooks is closer to PHP side and working with templates is closer to HTML side. I use Hybrid parent theme, which is very hook-oriented. It is a bliss right until you need to get rid of some parent\'s template.

For users that aren\'t tech savvy neither is very nice option. Why would they need to mess with such theme internals anyway?

PS also note performance issues. Stuff with hooks happens in memory, stuff with templates takes plenty of disk lookups. Especially if you are writing something like in your example.

PPS not everyone\'s preference... but instead of writing parent theme from scratch why not take existing parent theme and provide simple child theme to user?

结束

相关推荐

Adding goodies to themes

如何在主题更新时向Arjuna-X等主题添加内容而不丢失?儿童主题是一种很好的方式,还是有其他选择?如果新版本的主题对我添加的功能具有本机支持,该怎么办?