在WordPress中加载模板文件的正确方法

从WordPress 3.0开始,有一个名为的函数get_template_part(),该函数已在新的二十零默认WordPress主题中使用了很多。这是通过使用诸如get_header()包含header.php文件之类的功能来包含部分主题的通常方法的演变。此功能通过将相同文件包含多个文件来帮助代码重用,而且还允许子主题覆盖父主题。

该函数将必需的段和可选名称作为参数,这两个参数一起使用以选择要包括的正确模板文件。描述此功能如何工作的最好方法是显示其在某些情况下的工作方式。下面的调用get_template_part()仅使用slug参数。

get_template_part('foo');

这将在主题目录中查找名为的文件,foo.php并将其加载到放置函数调用的模板中。如果您使用的是子主题,则它将首先在子主题目录中查找,然后在父主题目录中查找。这样做的结果是,您可以覆盖父主题的某些部分,而不必在周围复制很多文件,只需在子主题中创建所需的文件,此功能便会首先加载它们。

第二个参数(称为名称)用于定义您要抓住的更具体的模板文件。以下调用同时get_template_part()使用slug和name参数。

get_template_part('foo', 'bar');

首先,在当前主题目录中查找一个名为foo-bar.php的文件,如果该文件不存在,则它将查找一个名为foo.php的文件。如果当前主题是子主题,则它将在子目录中以相同顺序查找文件,然后在父目录中以相同顺序查找文件。为了清楚起见,按以下顺序查找文件。

  1. /wp-content/themes/themechild/foo-bar.php

  2. /wp-content/themes/themechild/foo.php

  3. /wp-content/themes/themeparent/foo-bar.php

  4. /wp-content/themes/themeparent/foo.php

此功能的另一个用途是为主题的同一部分创建多个部分。例如,您可能希望以不同的方式打印当前正在查看的页面的内容,在这种情况下,您可能想要执行类似的操作。

if (is_singular()) {
    get_template_part('single');
} else {
    get_template_part('multi');
}

在这种情况下,如果正在查看的页面是单个页面(例如,单个帖子或页面),则将single.php被加载,否则将multi.php被加载。

此功能最有用的功能之一是,它意味着您不必在主题代码中使用include()或require()调用函数,但是此外,您可以允许人们将您的主题用作父主题并应用自己的自定义部分,而无需必须编辑您的主题。