问题描述

前提条件:来自自定义 PHP 应用程序 (使用 symfony,zend 等) 的世界,对于我来说,以原始 wordpress 主题完成的方式分离模板感觉不自然。例如页面的顶部位于标题中,位于 「索引,页面…」 中,底部部分位于页脚中。

当前结构示例:index.php

[include header]
... main content...
[include footer]

和 header.php

<html>
    <head>
      ....
    </head>
    <body>
      .....

和 footer.php

       .....
   </body>
</html>

我更习惯于具有布局的结构,并在其中包含其他 (部分) 模板。示例:index.php 模板

    <html>
      <head> [include header] </head>
      <body>
          [include body] [include    footer]
      </body>
    </html>

所以我试图想到原始 wordpress 模板结构的优势。

问题:与上述第二个例子相比,ORIGINAL wordpress 模板结构的优点是什么?

最佳解决方案

首先,如 @Toscho 所暗示的,get_header()get_footer()模板标签分别仅包括名为 header.phpfooter.php 的文件。在模板文件中调用两个模板标签,您可以以任何方式将模板文件 (index.php) 和模板部件文件 (header.phpfooter.php) 之间的内容分开。所以 WordPress 当然可以适应你的后一个例子。

也就是说,实际功率在标准中,”WordPress” 分离内容的方法来源于 WordPress Template Hierarchy 。在 WordPress 中,index.php 文件实际上是最后使用的模板文件。当没有找到其他的 more-specific 模板文件时,它是默认的后备模板文件:

由于根据当前的上下文”WordPress” 的标记方法,将使用 7(主) 到 16(次) 模板文件中的任何一个 (并且仅用于公开分发的主题; custom-designed 主题可以有任意数量的模板文件) 分离最小化重复代码的数量。

假设您要将您的 doctype 从过渡到更改 (严格 (或您想移动到 HTML5)),或者您想要更改站点页脚中的版权声明。使用”WordPress” 标记分离方法,您可以在一个文件中进行更改。使用后一种内容分离方法,您可以将这些更改改为七到十六 (或更多) 次。

Edit

我想到这个问题会出现:

I want to hear your opinion concerning following situation. Let’s say we need to include “og tags (Open Graph meta tags)” and they have different format for “index”, “single.php” “page” “archive” templates. If we have a structure like “original wp theme structure” then we have to use conditional statements(if..else) in the “header.php” file, right ? And I think everybody agrees less “conditional statements” better performance per request, right ?

我们有几个选择:

  1. 直接在 header.php 内使用 PHP 查询条件

  2. 在回调中使用 PHP 查询条件,挂接到 wp_head(或 wp_enqueue_scripts 等)

  3. 使用 get_header( $context ),其中 $context 基于模板层次结构,如果找到,将包含 header-$context.php,如果未找到,则为 header.php

但是,多个选项并没有真正解决您关于性能问题的根本问题。就个人而言,我认为性能命中可以忽略不计,因为所有查询条件都被缓存为查询对象缓存的一部分。所以称他们真的不应该发生任何有意义的表现。

次佳解决方案

没有矛盾,你可以同时使用。

例子

<!doctype html>
<html <?php language_attributes(); ?>>
  <head>
    <?php get_header(); ?>
  </head>
  <body>
    <?php get_template_part( 'content', get_post_format() ); ?>
    <?php get_footer(); ?>
  </body>
</html>

WordPress 系统的优点是:您可以根据需要自由构建模板。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。