Make WordPress Core

Opened 3 years ago

Last modified 19 months ago

#21062 new enhancement

Add a 'template_file' hook to load_template()

Reported by: mikeschinkel Owned by:
Milestone: Awaiting Review Priority: normal
Severity: normal Version: 3.4
Component: Themes Keywords: has-patch dev-feedback
Focuses: template Cc:


Please consider adding a 'template_file' hook in load_template() to enable the capture of the template filename. I have built a panel for the Debug Bar to be able to show template files loaded but I need this 'template_file' hook to capture the template file names. This would be super useful for developers who are building sites with the complex template loading logic found in various theme frameworks et. al.

With the hook added the code for load_template() might look like this:

function load_template( $_template_file, $require_once = true ) {
  global $posts, $post, $wp_did_header, $wp_did_template_redirect, $wp_query, $wp_rewrite, $wpdb, $wp_version, $wp, $id, $comment, $user_ID;

  if ( is_array( $wp_query->query_vars ) )
    extract( $wp_query->query_vars, EXTR_SKIP );

  $_template_file = apply_filters( 'template_file', $_template_file, $require_once );

  if ( $require_once )
    require_once( $_template_file );
    require( $_template_file );

Here's a screenshot showing the Theme Template Files panel I implemented so you can see the use-case. This plugin requires the hook I'm proposing in order to work and I have attached the plugin for other's review.

This hook could also allow the loading of the template file from other directories such as a shared directory on a server, as appropriate, but that's not the reason I found the need today.

The source for load_template() is found in /wp-includes/template.php.

Attachments (2)

add-template-file-hook.diff (457 bytes) - added by mikeschinkel 3 years ago.
Patch to add a 'template_file' hook to load_template()
debug-bar-theme-files-panel.zip (1.8 KB) - added by mikeschinkel 3 years ago.
Debug Bar Theme Files Panel plugin (requires proposed 'template_file' hook to work.)

Download all attachments as: .zip

Change History (15)

@mikeschinkel3 years ago

Patch to add a 'template_file' hook to load_template()

@mikeschinkel3 years ago

Debug Bar Theme Files Panel plugin (requires proposed 'template_file' hook to work.)

comment:1 @toscho3 years ago

  • Cc info@… added

comment:2 @mbijon3 years ago

  • Cc mike@… added

This would be a huge help to not only build with client-selected themes (that you may not know inside & out), but also to show clients how their chosen theme may be inefficient or non-performant.


comment:3 @scribu3 years ago

Similar proposal for locate_template(): #13239

comment:4 follow-up: @scribu3 years ago

If the purpose is logging, a do_action() would suffice, no?

comment:5 @ryanduff3 years ago

  • Cc ryan@… added

comment:6 in reply to: ↑ 4 @mikeschinkel3 years ago

  • Cc mikeschinkel@… added

Replying to scribu:

If the purpose is logging, a do_action() would suffice, no?

Logging is one purpose, but as stated above I could easily see wanting to change the directory from which a template file is loaded so make it a filter since an action would have effectively the same overhead.

comment:7 @mikeschinkel3 years ago

To whom it may concern: Is there any chance this could be considered for 3.5?

comment:8 follow-up: @nacin3 years ago

I'm weary of adding hooks into load_template() and locate_template() without careful consideration, which are covered by a few other tickets. In this case, get_included_files() should be enough for debugging, yes?

comment:9 in reply to: ↑ 8 @mikeschinkel3 years ago

Replying to nacin:

I'm weary of adding hooks intoload_template() and locate_template() without careful consideration

Weary? How can you be tired of adding hooks there, as there are no hooks there now!

Oh, you mean "wary"... ;-)

But seriously though, get_included_files() seems like a good solution, except the hook 'debug_bar_panels' is fired before /wp-includes/template-loader.php is included, so none of the theme files are available then.

Of course one can call get_included_files() and then use jQuery to add them back into the debug panel but personally I really much prefer to do things in PHP whenever possible; it's so much more testable and robust to use PHP.

That said, I'm curious what types of concerns you have able adding this hook, and hooks like @sival asks for in #18803? Aren't these little different than the 'template_include' hook which lets someone completely change the template?

comment:10 @iandunn3 years ago

  • Cc ian_dunn@… added

comment:11 @DeanMarkTaylor3 years ago

  • Cc DeanMarkTaylor added

comment:12 @talbet2 years ago

  • Cc talbet.fulthorpe@… added

comment:13 @nacin19 months ago

  • Component changed from Template to Themes
  • Focuses template added
Note: See TracTickets for help on using tickets.