-
Notifications
You must be signed in to change notification settings - Fork 0
/
template-trace.php
57 lines (49 loc) · 1.92 KB
/
template-trace.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<?php
/*
Plugin Name: Template Trace
Description: Shows you what templates are being used to make up the current page (in an admin bar item). Useful for understanding crazy themes.
Version: 1.0
Author: Andrew J Klimek
Author URI: https://github.com/andrewklimek/
License: GPL
*/
/* Save the loaded template to a global variable */
add_filter( 'template_include', 'ajk_template_trace_var_template_include', 1000 );
function ajk_template_trace_var_template_include( $t ) {
$GLOBALS['ajk_current_template'] = $t;
return $t;
}
add_action( 'wp_before_admin_bar_render', 'ajk_template_trace_admin_bar' );
function ajk_template_trace_admin_bar()
{
if ( is_admin() || !is_admin_bar_showing() || !current_user_can('manage_options') ) return;
global $wp_admin_bar, $ajk_current_template;
$root_cutoff = strpos( $ajk_current_template, '/wp-content/' ) + 1;// for showing an abbreviated path. full path is on hover
$cutoff = $root_cutoff + 18;// /wp-content/themes/
$wp_admin_bar->add_menu([
'parent' => false,
'id' => 'template-trace',
'title' => basename($ajk_current_template),
'meta' => ['title' => $ajk_current_template]
]);
/* ITEM DROP DOWN: Get includes that are in the themes folder and that were called after the base template file */
$included_templates = [];
$reached_base = false;
$i = 0;
$included_files = get_included_files();
foreach ( $included_files as $path )
{
if ( $path === $ajk_current_template ) $reached_base = true;
if ( ! $reached_base ) continue;
// ok we've hit the base template in the includes array, now start looking for stuff in the themes folder
if ( strpos($path, '/themes/') ) $in_themes = true;
elseif ( strpos($path, 'template') ) $in_themes = false;
else continue;
$wp_admin_bar->add_menu([
'parent' => 'template-trace',
'id' => 'template-trace-sub-' . ++$i,
'title' => $in_themes ? substr($path, $cutoff) : substr($path, $root_cutoff),
'meta' => ['title' => $path]
]);
}
}