Вывод имени шаблона WordPress для отладки
Я взял на себя поддержку крупного сайта на WordPress Multisite. На сайте около 200 шаблонов, многие из них специфичны для отдельных страниц, и нет стандартной процедуры именования.
Это сэкономило бы много времени, если бы при просмотре сайта я мог видеть названия шаблонов, из которых состоит текущая страница. Возможно ли это? Я изучил плагины для отладки WordPress, но они, кажется, ориентированы на переменные и SQL-запросы, а не на шаблоны.
Следующие функции выполняют 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' );

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

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

Хотя это не является прямым ответом на поставленный вопрос, стоит отметить, что WordPress по умолчанию добавляет имя класса к тегу <body>
для пользовательских шаблонов страниц. Например, если вы просматриваете страницу с пользовательским шаблоном, и имя файла шаблона — custom.php, то к тегу <body>
будет добавлен класс page-template-custom
.
Документацию по этой функции можно найти здесь: https://codex.wordpress.org/Function_Reference/body_class#Page
