激活wordpress主题时,找出要更改的文件总是很麻烦。
有什么想法可以简化事情吗?

但是,另一方面,考虑到get_template_part功能,这可能是不可能的。你怎么说?

评论

我检查了html并找到了已识别的标签或独特的标签。

查看源代码,并查找可以告诉您使用哪个模板的主体类。还为您提供了ID。

获取当前模板文件名称的可能副本

@BradDalton +1。特别是在不允许我们安装插件或编写函数以实现目标的情况下。

#1 楼

挂钩template_include,设置一个全局变量以记下主题设置的模板,然后将该值读回页脚或页眉以查看给定视图正在调用哪个模板。

我谈到了此过滤器在获取当前模板文件的名称之前,先进行钩子,然后获取该代码的副本并对其进行主题背景的functions.php文件作图。

然后打开主题的header.phpfooter.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_debugwp_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。

#9 楼

有一个名为Theme Check的插件可以完全做到这一点。它显示用作HTML注释的当前模板文件的名称。