有什么想法可以简化事情吗?
但是,另一方面,考虑到get_template_part功能,这可能是不可能的。你怎么说?
#1 楼
挂钩template_include
,设置一个全局变量以记下主题设置的模板,然后将该值读回页脚或页眉以查看给定视图正在调用哪个模板。我谈到了此过滤器在获取当前模板文件的名称之前,先进行钩子,然后获取该代码的副本并对其进行主题背景的
functions.php
文件作图。然后打开主题的
header.php
或footer.php
(或任意位置),然后使用类似以下内容的方法来打印当前模板。<div><strong>Current template:</strong> <?php get_current_template( true ); ?></div>
如果要在生产站点上使用此信息,并使该信息远离非管理员用户,请添加一些条件逻辑。
<?php
// If the current user can manage options(ie. an admin)
if( current_user_can( 'manage_options' ) )
// Print the saved global
printf( '<div><strong>Current template:</strong> %s</div>', get_current_template() );
?>
现在,您可以跟踪正在使用哪种模板的视图,同时使该信息远离访问者。
评论
如果此答案有问题,或者任何人都可以对可以改善此答案的方法提出意见,请在此提出评论,并分享您对如何改善它的想法和想法。
– t31os
14年1月28日在16:03
兄弟没有用,它说“未定义函数”
–卢卡斯·布斯塔曼特(Lucas Bustamante)
16年4月27日在15:48
@LucasB同样在这里,那是我得到的错误
–林肯·伯根森(Lincoln Bergeson)
17年1月7日,0:21
这应该是get_page_template
–开拓者
17年8月11日在20:57
get_current_template不是一个函数,get_page_template对我来说什么都不打印(woocommerce页面)。
– run_the_race
6月27日9:59
#2 楼
好吧,如果您要做的只是检查已使用哪个模板文件来生成当前页面,那么您就不需要弄麻烦代码了;)有一个方便的插件,称为Debug Bar 。在包括您在内的许多情况下,它都是很好的帮助者。您绝对应该检查一下-对我和许多其他人来说,它是任何WP开发的必备伴侣。
我附上了一张截图,可以让您坠入爱河...
要使调试栏正常工作,您需要启用
wp_debug
和wp_savequeries
选项。这些选项默认情况下处于禁用状态。 在进行任何更改之前,请记住以下几点:
除非网站没有提供,否则请勿在生产环境中进行操作迎合了很多流量。
完成调试后,请确保禁用网站的选项(特别是wp_savequeries选项,因为它会影响性能)。
要进行更改:
通过ftp客户端打开
wp_config.php
文件。搜索
wp_debug
选项。将其编辑为define( 'WP_DEBUG', true );
。如果该行不存在,请将其添加到文件中。类似地,将
define( 'SAVEQUERIES', true );
行编辑或添加到文件中。 保存。您已准备好进行调试。
更多信息:法典
评论
@justCallMeBiru-调试栏插件不需要WP_DEBUG和SAVEQUERIES,尽管它们对此有所增强。
– Pat J
2014年1月15日下午16:35
运行这样的插件,仅需要一点点信息,就会创建大量开销的恕我直言,因此这就是为什么我没有在自己的答案中建议它的原因。就是说,很明显人们喜欢这个答案,我很好奇为什么知道。
– t31os
2014年1月28日在16:02
#3 楼
我使用此方便的功能仅显示超级管理员的当前模板:function show_template() {
if( is_super_admin() ){
global $template;
print_r($template);
}
}
add_action('wp_footer', 'show_template');
希望有帮助。 :)
评论
这是转到答案,应该接受。
–混合Web开发
18 Mar 13'在0:21
我也使用它,但是它仍然缺少使用“ include”的显示,只显示顶层页面。
– Burndog
7月8日13:18
#4 楼
在每个相关模板文件的get_header行之后添加以下代码:<!-- <?php echo basename( __FILE__ ); ?> -->
在浏览器中>查看源,模板名称将在以下位置显示为注释您的html代码,例如
<!-- page.php -->
评论
将其添加到任何地方都需要付出很大的努力
–阿达尔
19年2月18日在1:49
哈哈哈,如果要标记每个文件然后简单地用实际文件名标记它,为什么还要麻烦呢!
–Aurovrata
5月9日6:29
@Aurovrata很久以前了。有更好的解决方案。但是我有一个简单的脚本,可将代码插入文件夹中所有文件的顶部,因此无需对实际名称进行硬编码。在1或2秒内完成。
–罗纳德
5月20日18:46
很公平, :)
–Aurovrata
5月21日11:27
#5 楼
您可以在这里进行操作:一个HTML列表,其中包含当前着陆页正在使用的所有模板文件,包括来自插件,子主题和/或父主题组合的所有模板部分,所有这些都在一行中代码:
echo '<ul><li>'.implode('</li><li>', str_replace(str_replace('\', '/', ABSPATH).'wp-content/', '', array_slice(str_replace('\', '/', get_included_files()), (array_search(str_replace('\', '/', ABSPATH).'wp-includes/template-loader.php', str_replace('\', '/', get_included_files())) + 1)))).'</li></ul>';
您可能需要检查您的服务器在任何路径下均未返回双斜杠。请记住将其放置在实际使用了所有模板文件之后,例如在footer.php中,但要在管理栏渲染之前。
如果
admin-bar stuff
路径显示在顶部或任何其他文件中,请更改文件名template-loader.php
在这行代码中:您需要中断的任何filname。通常:class-wp-admin-bar.php
如果需要在管理栏中进行此操作,请使用正确的优先级(最早)确保此列表末尾没有文件输入。例如:
add_action('admin_bar_menu', 'my_adminbar_template_monitor', -5);
优先
-5
确保先加载。关键是在适当的时候调用get_included_files()
,否则需要弹出一些数组!要分手:
没有PHP backtrace,您将无法收集所有包含的模板文件。
template_include
内部的超全局变量将不会全部收集它们。另一种方法是在每个模板文件中“放置标记”,但是如果您需要首先与文件进行交互,则会对时间和整个想法感到困惑。1)我们需要检查一下内部当前Wordpress请求已使用的所有文件。他们很多!如果在注册功能之前就使用了300个文件,请不要感到惊讶。
$included_files = str_replace('\', '/', get_included_files());
我们正在使用PHP本机的get_included_files(),将反斜杠转换为正斜杠。以匹配大多数Wordpress返回路径。
2)我们正在从template-loader.php的注册位置切下该数组。之后,填充的get_included_files()应该只填充模板文件。
/* The magic point, we need to find its position in the array */
$path = str_replace('\', '/', ABSPATH);
$key = $path.'wp-includes/template-loader.php';
$offset = array_search($key, $included_files);
/* Get rid of the magic point itself in the new created array */
$offset = ($offset + 1);
$output = array_slice($included_files, $offset);
3)缩短结果,直到主题文件夹或插件文件夹(正在使用的模板)可以与插件,主题文件夹或子主题文件夹混合使用,我们才需要路径。
$replacement = $path.'wp-content/';
$output = str_replace($replacement, '', $output);
4)最后,将数组从数组转换为漂亮的HTML列表
$output = '<ul><li>'.implode('</li><li>', $output).'</li></ul>';
在part3)-replacement中可能需要最后修改,如果您不希望包含通过插件。他们可能会在晚些时候调用
class-files
,并在模板输出处理过程中调用“拦截”。但是,我发现将它们保持可见状态是合理的,因为这样做的目的是跟踪加载的内容,即使不是一个在此阶段呈现输出的“模板”。
#6 楼
还有另一个专门用于此目的的准系统插件。我倾向于安装调试栏,因为这些其他功能看起来很有用,但这是更基本的功能,专门用于此目的:http://wordpress.org/extend/plugins/what-the-file /
评论
节省了我一些时间。
– m4n0
12月11日14:08
#7 楼
我发现最简单的方法是在body标签上包括WordPress功能。它将根据您正在查看的页面(首页显示首页,页面显示页面等)添加几个类。在此处查看:http://codex.wordpress.org/ Function_Reference / body_class
此外,在这些页面上使用CSS定位元素也很有帮助。
认识模板层次结构(http://codex.wordpress.org/Template_Hierarchy)正如David R提到的那样也是个好主意。
#8 楼
我做的一件非常简单的事情是在主题的每个相关文件中插入HTML注释,以标识模板文件,例如在index.php的顶部。<!-- index -->
并且位于front-page.php的顶部。
<!-- front -->
但是显然,这需要修改主题。我怀疑您可以在footer.php文件或header.php文件中添加自定义函数,该函数将告诉您正在使用的文件。我倾向于使用以上方法和参考表http://codex.wordpress.org/Template_Hierarchy。
评论
我检查了html并找到了已识别的标签或独特的标签。查看源代码,并查找可以告诉您使用哪个模板的主体类。还为您提供了ID。
获取当前模板文件名称的可能副本
@BradDalton +1。特别是在不允许我们安装插件或编写函数以实现目标的情况下。