激活wordpress主题时,找出要更改的文件总是很麻烦。任何想法如何简化事情?
但另一方面,考虑到get_template_part功能,这可能是不可能的。你说什么?
激活wordpress主题时,找出要更改的文件总是很麻烦。任何想法如何简化事情?
但另一方面,考虑到get_template_part功能,这可能是不可能的。你说什么?
Answers:
勾上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() );
?>
现在,您可以跟踪正在使用哪种模板的视图,同时使该信息远离访问者。
好吧,如果您要做的只是检查已使用哪个模板文件来生成当前页面,那么您就不需要弄脏代码了;)
有一个方便的插件,称为Debug Bar。 在包括您在内的许多情况下,它都是很好的帮助者。您绝对应该检查一下-对我和许多其他人来说,它是任何WP开发的必备伴侣。
我已经附上了一张截图,可以让您坠入爱河...
要使调试栏正常工作,您需要启用wp_debug
和wp_savequeries
选项。这些选项默认情况下处于禁用状态。
不过,在进行任何更改之前,请记住以下几点:
进行更改:
wp_config.php
通过ftp客户端打开文件。wp_debug
选项。修改为define( 'WP_DEBUG', true );
。如果该行不存在,请将其添加到文件中。define( 'SAVEQUERIES', true );
到文件中。更多信息:Codex
WP_DEBUG
和SAVEQUERIES
,尽管它们对此进行了增强。
我使用此方便的功能仅显示超级管理员的当前模板:
function show_template() {
if( is_super_admin() ){
global $template;
print_r($template);
}
}
add_action('wp_footer', 'show_template');
希望能有所帮助。:)
我发现最简单的方法是在body标签上包括WordPress功能。它将根据您正在查看的页面(首页显示首页,页面显示页面等)添加几个类。
在此处查看:http : //codex.wordpress.org/Function_Reference/body_class
另外,对于在这些页面上使用CSS定位元素很有帮助。
了解David R提到的模板层次结构(http://codex.wordpress.org/Template_Hierarchy)也是一个好主意。
还有另一个专门用于此目的的准系统插件。我倾向于安装调试栏,因为这些其他功能看起来很有用,但这是更基本的功能,专门用于此目的:http : //wordpress.org/extend/plugins/what-the-file/
我做的一件非常简单的事情是在主题的每个相关文件中插入HTML注释,以标识模板文件,例如,在我拥有的index.php顶部
<!-- index -->
并在front-page.php的顶部
<!-- front -->
但这显然需要修改主题。我怀疑您可以在footer.php文件或header.php文件中添加自定义函数,该函数将告诉您正在使用的文件。我倾向于使用上面的方法和参考表http://codex.wordpress.org/Template_Hierarchy。
有一个名为Theme Check的插件可以完全做到这一点。它显示用作HTML注释的当前模板文件的名称。
干得好:
一个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回溯,您将无法收集所有包含的模板文件。内部的超级球星template_include
不会全部收集它们。另一种方法是在每个模板文件中“放置标记”,但是如果您需要首先与文件进行交互,那么您会为时间和整个想法感到困惑。
1)我们需要检查当前Wordpress请求已使用的所有文件。他们很多!如果在注册functions.php之前使用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
但是,我发现让它们可见是合理的,因为它的想法是跟踪已加载的内容,即使不是在此阶段呈现输出的“模板”也是如此。