打印WordPress模板文件名以进行调试

时间:2011-10-24 作者:PeterB

我已经接管了一个大型WP-MS供电站点的维护工作。该网站有大约200个模板,许多是特定于页面的,并且没有标准的命名程序。

如果在浏览网站时,我可以看到构成当前页面的模板名称,这将节省大量时间。这可能吗?我看过WordPress的调试插件,但它们似乎面向变量和SQL查询,而不是模板。

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

这也是一种快捷方式;

<!--

<?php print_r( debug_backtrace() ) ?>

-->
将其粘贴到结束标记之前

SO网友:kaiser

以下函数可执行3项操作:

显示当前请求的模板层次结构显示正在使用的主题(显示访问此主题的两种方法)

  • 显示正在用于请求的当前模板(将其附加到内容筛选器)。您可能需要根据您的角色使用条件或功能。到目前为止,我还不知道如何为存档和类似的列表视图请求显示页面模板

    // That\'s not that easy to read:
    var_dump( get_required_files() );
    
    /** 
     * Show template hierarchy and theme at the end of the request/page.
     * @return void
     */
    function wpse31909_template_info()
    {
            // Don\'t display for non-admin users
            if ( ! current_user_can( \'manage_options\' ) )
                return;
    
            // You have to build yourself the hierarchy here or somewhere in front of the fn
            global $wp_template_hierarchy;
    
            $content  = \'<pre>\';
                // Show template hierarchy
                $content .= "TEMPLATE HIERARCHY\\n==================\\n";
                $content .= var_export( $wp_template_hierarchy, true );
    
                // Show current theme in use:
                $content .= "\\n\\nCURRENT THEME\\n=============\\n";
                $content .= var_export( get_option( \'template\' ), true );
                // or: 
                # $content .= var_export( get_template(), true );
            $content .= \'</pre>\';
    
            return print $content;
    }
    add_action( \'shutdown\', \'wpse31909_template_info\' );
    
    
    /**
     * Show template on singular views attached to the end of the content for admins
     * @return $content
     */
    function wpse31909_template_to_content( $content )
    {
            // Display standard content for non-admin users and not single post/page/cpt/attachment view.
            if ( ! current_user_can( \'manage_options\' ) && ! is_singular() )
                return $content;
    
            $content .= \'<pre>\';
                // Show current template in use: Must be in the loop to get the global $post
               $content .= var_export( get_post_meta( $GLOBALS[\'post\']->ID, \'_wp_page_template\' ), true );
            $content .= \'</pre>\';
    
            return $content;
    }
    add_filter( \'the_content\', \'wpse31909_template_to_content\' );
    

  • SO网友:Koopa Troopa

    为了调试,我使用它只需在页面顶部打印模板文件名。

    // For debugging - show template file
    add_action(\'wp_head\', \'show_template\');
    function show_template() {
        global $template;
        print_r($template);
    }
    

    SO网友:Ezra Free

    虽然不能直接回答眼前的问题,但这里可能还需要注意的是,默认情况下WordPress会将类名添加到<body> 自定义页面模板的标记。例如,如果您正在查看一个具有自定义页面模板的页面,并且该模板的文件名是自定义的。php,然后是page-template-custom 将添加到<body> 标签

    有关此功能的文档可在此处找到:https://codex.wordpress.org/Function_Reference/body_class#Page

    结束

    相关推荐

    How do you debug plugins?

    我对插件创作还很陌生,调试也很困难。我用了很多echo,它又脏又丑。我确信有更好的方法可以做到这一点,也许是一个带有调试器的IDE,我可以在其中运行整个站点,包括插件?