Вывод имени шаблона WordPress для отладки

24 окт. 2011 г., 13:06:38
Просмотры: 8.18K
Голосов: 8

Я взял на себя поддержку крупного сайта на WordPress Multisite. На сайте около 200 шаблонов, многие из них специфичны для отдельных страниц, и нет стандартной процедуры именования.

Это сэкономило бы много времени, если бы при просмотре сайта я мог видеть названия шаблонов, из которых состоит текущая страница. Возможно ли это? Я изучил плагины для отладки WordPress, но они, кажется, ориентированы на переменные и SQL-запросы, а не на шаблоны.

0
Все ответы на вопрос 4
1

это также быстрый способ;

<!--

<?php print_r( debug_backtrace() ) ?>

-->

вставьте это прямо перед закрывающим тегом

24 окт. 2011 г. 18:54:58
Комментарии

При тестировании этот код оказался более надежным, чем код @kaiser, так как он работает как со страницами, так и с записями; однако его также гораздо сложнее читать :)

PeterB PeterB
25 окт. 2011 г. 10:40:22
5

Следующие функции выполняют 3 действия:

  • Показывают иерархию шаблонов для текущего запроса
  • Показывают используемую тему (2 способа реализации)
  • Показывают текущий шаблон, используемый для запроса *)

*) Необходимо подключить к фильтру контента. Возможно, потребуется настроить условия или права доступа в зависимости от роли пользователя. На данный момент нет решения для отображения шаблона страницы для архивов и подобных запросов с представлением списка.

// Это не так просто для чтения:
var_dump( get_required_files() );

/** 
 * Показывает иерархию шаблонов и тему в конце запроса/страницы.
 * @return void
 */
function wpse31909_template_info()
{
        // Не отображать для пользователей без прав администратора
        if ( ! current_user_can( 'manage_options' )
            return;

        // Необходимо самостоятельно собрать иерархию шаблонов здесь или перед функцией
        global $wp_template_hierarchy;

        $content  = '<pre>';
            // Показать иерархию шаблонов
            $content .= "ИЕРАРХИЯ ШАБЛОНОВ\n==================\n";
            $content .= var_export( $wp_template_hierarchy, true );

            // Показать текущую используемую тему:
            $content .= "\n\nТЕКУЩАЯ ТЕМА\n=============\n";
            $content .= var_export( get_option( 'template' ), true );
            // или:
            # $content .= var_export( get_template(), true );
        $content .= '</pre>';

        return print $content;
}
add_action( 'shutdown', 'wpse31909_template_info' );


/**
 * Показывает шаблон на одиночных страницах, добавляя информацию в конец контента для администраторов
 * @return $content
 */
function wpse31909_template_to_content( $content )
{
        // Отображать стандартный контент для пользователей без прав администратора и не для одиночных записей/страниц/вложений.
        if ( ! current_user_can( 'manage_options' ) && ! is_singular() )
            return $content;

        $content .= '<pre>';
            // Показать текущий используемый шаблон: Должен быть внутри цикла для доступа к глобальной переменной $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' );
24 окт. 2011 г. 15:08:52
Комментарии

Возможно, это сработает, если подключить вторую функцию к фильтру the_excerpt. Тогда она также будет отображаться в списках. @All Можете свободно редактировать и дополнять этот ответ.

kaiser kaiser
24 окт. 2011 г. 15:10:38

Опечатка с переменной в первом var_dump.

t31os t31os
24 окт. 2011 г. 16:49:17

@t31os Не хочешь исправить? Даёт +2 очка репутации за каждый голос. Всё равно спасибо :)

kaiser kaiser
24 окт. 2011 г. 17:00:34

Не так часто здесь бываю, это было скорее мимолетное наблюдение.. ;)

t31os t31os
25 окт. 2011 г. 13:21:50

@t31os Довольно забавно. Рад, что было "filter", а не "fitler" ;)

kaiser kaiser
25 окт. 2011 г. 17:05:23
0

Я использую это для простого вывода имени файла шаблона в верхней части страницы в целях отладки.

// Для отладки - показываем файл шаблона
add_action('wp_head', 'show_template');
function show_template() {
    global $template;
    print_r($template);
}
21 нояб. 2011 г. 23:39:52
0
-1

Хотя это не является прямым ответом на поставленный вопрос, стоит отметить, что WordPress по умолчанию добавляет имя класса к тегу <body> для пользовательских шаблонов страниц. Например, если вы просматриваете страницу с пользовательским шаблоном, и имя файла шаблона — custom.php, то к тегу <body> будет добавлен класс page-template-custom.

Документацию по этой функции можно найти здесь: https://codex.wordpress.org/Function_Reference/body_class#Page

2 апр. 2016 г. 20:47:17