Opened 13 years ago
Closed 9 years ago
#21791 closed enhancement (wontfix)
Enhancement: locate_template() support for multiple file types (not just .php)
Reported by: |
|
Owned by: | |
---|---|---|---|
Milestone: | Priority: | normal | |
Severity: | normal | Version: | |
Component: | Themes | Keywords: | |
Focuses: | template | Cc: |
Description
I have modified locate_template() to allow location of file types other than .php. The core currently only searches for .php extensions for template file names (search.php, 404.php, etc). I have a HAML parser, and this mod allows the core to locate .haml files (search.haml, 404.haml). Then I can use the 'template_include' filter to handle that file type.
Do you think this is the best way to accomplish it? I also made the function a little more DRY.
function locate_template($template_names, $load = false, $require_once = true ) { $located = ''; $template_paths = array( STYLESHEETPATH, TEMPLATEPATH ); $template_file_types = apply_filters('template_file_types', array('php')); foreach ( (array) $template_names as $template_name ) { if ( !$template_name ) continue; foreach($template_file_types as $template_file_type) { $template_name_try = str_replace('.php', '.'.$template_file_type, $template_name); foreach($template_paths as $template_path) { $template_name_try = $template_path . '/' . $template_name_try; if ( file_exists($template_name_try)) { $located = $template_name_try; break 3; } } } } if ( $load && '' != $located ) load_template( $located, $require_once ); return $located; }
you think this modification would be a good core enhancement?
Change History (5)
#4
@
11 years ago
- Keywords close added
locate_template()
is not specific to PHP files. It can be passed an array of any file names and it will go through them, check if they exist, and include them.
The scenario described above could be managed by either the template_include
or the {$type}_template
filter.
After further testing, this solution is incomplete because it interferes with the template file structure and capability discovery process.
For example, renaming 'index.php' in a template folder makes it appear broken to WordPress. Also, support for page templates is missing if they don't have the correct file extension or commenting at the top.
If different template file formats were to be supported, we would need to hook into the template structure/capability discovery process.