如何找出哪个模板页面正在为当前页面提供服务?

时间:2011-12-24 作者:Average Joe

当你激活一个wordpress主题时,总是很难找到要更改内容的文件。你知道如何简化事情吗?

但另一方面,考虑到get\\u template\\u part功能,这可能是不可能的。你怎么说?

8 个回复
最合适的回答,由SO网友:t31os 整理而成

钩住template_include, 设置一个全局值以记录主题设置的模板,然后将该值读回页脚或页眉中,以查看为给定视图调用的模板。

我在进来之前说过这个过滤器挂钩Get name of the current template file, 但是去拿一个copy of that code 然后把你的主题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() ); 
?>
现在,您可以跟踪哪些视图正在使用什么模板,同时将这些信息远离访问者。

SO网友:Michal Mau

好吧,如果您只想检查哪个模板文件被用来生成当前页面,那么您就不需要用代码弄脏双手;)

There\'s this handy plugin called Debug Bar. 它在很多情况下都是一个很好的帮手,包括你的情况。你一定要看看它——对我和其他许多人来说,它是任何WP开发的必备伴侣。

I\'ve attached a screenshot that could make you fall in love...

enter image description here

获取调试栏working, 您需要启用wp_debugwp_savequeries 选项。默认情况下,这些选项处于禁用状态。

但在进行任何更改之前,有几点需要记住:

除非网站不能满足大量流量,否则不要在生产环境中这样做

打开wp_config.php 通过ftp客户端创建文件

  • 搜索wp_debug 选项将其编辑为define( \'WP_DEBUG\', true );. 如果该行不存在,请将其添加到文件中define( \'SAVEQUERIES\', true ); 到文件更多信息:Codex

  • SO网友:mightypixel

    我使用这个方便的功能,只为超级管理员显示当前模板:

    function show_template() {
        if( is_super_admin() ){
            global $template;
            print_r($template);
        } 
    }
    add_action(\'wp_footer\', \'show_template\');
    
    希望有帮助。:)

    SO网友:ronald

    在每个相关模板文件的get\\u标题行之后添加以下代码:

    <!-- <?php echo basename( __FILE__ ); ?> -->
    
    在浏览器>查看源代码中,模板名称将显示为html代码中的注释,例如。

    <!-- page.php -->
    

    SO网友:Julian K

    还有一个更简单的插件专门用于此目的。我倾向于安装调试栏,因为这些其他功能看起来很有用,但这项功能更基本,并且专门用于此目的:http://wordpress.org/extend/plugins/what-the-file/

    SO网友:Jonas Lundman

    Here you go:

    包含的HTML列表all 当前登录页正在使用的模板文件,including all template-parts from plugins, child theme and/ or parent theme combinations, 一行代码:

    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>\';
    
    您可能需要check 您的服务器不会在任何路径返回双斜杠。记住在所有模板文件实际使用后放置此文件,如在页脚中。php,但是before admin bar renders.

    如果admin-bar stuff 路径显示在顶部,或任何其他文件,请更改文件名template-loader.php 在这一行代码中,输入:无论您需要从哪个filname中断。通常:class-wp-admin-bar.php

    如果你在管理栏中需要这个,use the right priotity (最早)to make shure no files are entered at the end 此列表的。例如:

    add_action(\'admin_bar_menu\', \'my_adminbar_template_monitor\', -5);
    
    优先级-5 先加载舒尔。关键是打电话get_included_files() 在适当的时候,否则需要一些数组弹出!

    To break this up:

    can not 收集所有包含的模板文件,无需PHP回溯。Superglobals 在…内template_include wont collect them all. 另一种方法是在每个模板文件中“放置一个标记”,但如果您需要首先与这些文件进行交互,那么您会对时间和整个想法感到困惑。

    1) 我们需要检查当前Wordpress请求使用的所有文件。而且他们很多!如果您在函数之前使用了300个文件,请不要感到惊讶。php已注册。

    $included_files = str_replace(\'\\\\\', \'/\', get_included_files());
    
    我们正在使用PHP本机get\\u included\\u files(),将反斜杠转换为正斜杠,以匹配大多数Wordpress返回路径。

    2) 我们正在从模板加载器所在的位置切割该数组。php已注册。之后,填充的get\\u included\\u 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) 缩短结果,我们不需要路径,直到主题文件夹或插件文件夹,as templates 正在使用中,can be mixed 来自插件、主题或子主题文件夹。

    $replacement = $path.\'wp-content/\';
    $output = str_replace($replacement, \'\', $output);
    
    4) 最后,将数组转换为一个漂亮的HTML列表

    $output = \'<ul><li>\'.implode(\'</li><li>\', $output).\'</li></ul>\';
    
    可能需要最后一次修改in part3) -更换,如果dont 所需的want包括插件。他们可能会打电话class-files 延迟,并在模板输出处理期间“截取”。

    然而,我发现让它们可见是合理的,因为这样做的目的是跟踪加载的内容,即使在这个阶段渲染输出的不是“模板”。

    SO网友:CookiesForDevo

    我发现最简单的方法是在body标签上包含WordPress函数。它将根据您正在查看的页面添加几个类(首页、逐页等)。

    请在此处查看:http://codex.wordpress.org/Function_Reference/body_class

    此外,它还有助于在这些页面上使用CSS定位元素。

    了解模板层次结构(http://codex.wordpress.org/Template_Hierarchy)正如DavidR所提到的,这也是一个好主意。

    SO网友:navjotjsingh

    有一个名为Theme Check 正是这样做的。它将当前模板文件的名称显示为HTML注释。

    结束

    相关推荐

    Enable page templates. How?

    基本问题,但我想启用页面模板。我有一个启用了页面模板的主题。我切换到了另一个模板,但没有更改模板的选项,即使在创建新页面时也是如此。如何打开此选项?我在抄本和论坛上找到了根,但找不到。