locate_template
将尝试在子主题中查找指定的文件,如果父主题不存在,则返回父主题:
locate_template(\'inc/custom.php\', true);
将第二个参数设置为
true
导致它需要文件,而不仅仅是确定路径。
顾名思义,locate_template
用于加载模板文件。它有一些额外的开销,您很可能不需要加载库。精简版应为:
function load_theme_file($path) {
if ( file_exists( STYLESHEETPATH . \'/\' . $path )) {
include( STYLESHEETPATH . \'/\' . $path );
} else {
require( TEMPLATEPATH . \'/\' . $path );
}
}
用法:
load_theme_file(\'inc/custom.php\');
编辑:我只是想简要说明一下这种整体方法的潜在问题。
让子主题覆盖文件对于模板很有效,但对于库,错误的空间更大。如果子主题需要修改单个函数,则必须复制整个文件,并在此过程中覆盖该文件中的每个函数。
如果更新了父主题,并且对覆盖文件中的任何函数进行了更改,则可能会导致问题。您可以通过将库分解成更小的块来缓解此问题,但这会使代码库更难维护。
在我看来,更好的解决方案是使用面向对象的方法。允许子主题扩展您定义的类,然后使用子主题的类。在实现类中,子主题只需定义它需要覆盖的方法。在父主题中,您可以通过使哪些方法final
.
通过大量使用过滤器和操作,还可以减少子主题替换整个文件的需要。