我在一个网站上工作,将有多达30个模板。
我不想让我的主题文件夹根目录下的所有模板把所有东西都弄得乱七八糟。
我知道如何修改get_page_templates()
文件中的函数wp-admin/includes/theme.php
让它扫描我的主题文件夹中的子目录。但我不想手动更改核心文件-如何将筛选器应用于get_page_templates()
用我放进去的过滤器functions.php
?
正如您在下面看到的代码是我第一次尝试这一点,但当我将代码放入其中时,它还不起作用function.php
.
但是,我可以将这些更改放入核心文件中wp-admin/includes/theme.php
但这不是一个好的做法,应该始终正确避免,因为自动更新可以消除它。
function get_page_templates_override()
{
$themes = get_themes();
$theme = get_current_theme();
$templates = $themes[$theme][\'Template Files\'];
$page_templates = array();
if ( is_array( $templates ) ) {
$base = array( trailingslashit(get_template_directory()), trailingslashit(get_stylesheet_directory()) );
foreach ( $templates as $template ) {
$basename = str_replace($base, \'\', $template);
// modifide this by commenting it out so that sub dirs arent blocked
// if ( false !== strpos($basename, \'/\') )
// continue;
// modified this with FILE_USE_INCLUDE_PATH so sub dirs get scanned
$template_data = implode( \'\', file( $template, FILE_USE_INCLUDE_PATH ));
$name = \'\';
if ( preg_match( \'|Template Name:(.*)$|mi\', $template_data, $name ) )
$name = _cleanup_header_comment($name[1]);
if ( !empty( $name ) ) {
$page_templates[trim( $name )] = $basename;
}
}
}
return $page_templates;
}
add_filter(\'get_page_templates\',\'get_page_templates_override\', 1);