Как узнать, какой шаблон используется для отображения текущей страницы?

24 дек. 2011 г., 22:32:48
Просмотры: 144K
Голосов: 70

Когда вы активируете тему WordPress, всегда возникает сложность с поиском нужного файла для внесения изменений. Есть ли идеи, как упростить этот процесс?

Однако, учитывая функциональность get_template_part, это может быть невозможно. Что скажете?

4
Комментарии

Я проверяю HTML и нахожу идентифицирующий тег или что-то уникальное.

Naoise Golden Naoise Golden
27 дек. 2011 г. 20:38:48

Просматриваю исходный код и ищу классы body, которые указывают, какой шаблон используется. Также дают идентификатор.

Brad Dalton Brad Dalton
4 февр. 2014 г. 23:33:05

Возможный дубликат Получить имя текущего файла шаблона

Burgi Burgi
13 июн. 2017 г. 12:56:15

@BradDalton +1. Особенно, когда нам не разрешено устанавливать плагин или писать функцию для достижения цели.

Subrata Sarkar Subrata Sarkar
13 июл. 2018 г. 09:57:57
Все ответы на вопрос 8
7
44

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

Я уже говорил об этом фильтре ранее в статье Получение имени текущего файла шаблона, но возьмите копию этого кода и поместите его в файл functions.php вашей темы.

Затем откройте файл header.php или footer.php темы (или любой другой по вашему выбору) и используйте что-то вроде следующего, чтобы вывести текущий шаблон.

<div><strong>Текущий шаблон:</strong> <?php get_current_template( true ); ?></div>

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

<?php 
// Если текущий пользователь может управлять настройками (т.е. администратор)
if( current_user_can( 'manage_options' ) ) 
    // Выводим сохранённую глобальную переменную
    printf( '<div><strong>Текущий шаблон:</strong> %s</div>', get_current_template() ); 
?>

Теперь вы можете отслеживать, какие представления используют какие шаблоны, скрывая эту информацию от посетителей.

26 дек. 2011 г. 14:57:16
Комментарии

Если что-то не так с этим ответом, или если у кого-то есть комментарии по поводу того, как можно улучшить этот ответ, не стесняйтесь, оставьте комментарий здесь и поделитесь своими мыслями и идеями о том, как сделать его лучше.

t31os t31os
28 янв. 2014 г. 18:03:46

Не сработало, бро, пишет "Undefined function"

Lucas Bustamante Lucas Bustamante
27 апр. 2016 г. 18:48:47

@LucasB то же самое, получил такую же ошибку

Lincoln Bergeson Lincoln Bergeson
7 янв. 2017 г. 02:21:02

Это должно быть get_page_template

Blazemonger Blazemonger
11 авг. 2017 г. 23:57:36

get_current_template — это не функция, и get_page_template ничего не выводит для меня (страница WooCommerce).

run_the_race run_the_race
27 июн. 2020 г. 12:59:42

@run_the_race - вам следует скопировать функцию отсюда: https://wordpress.stackexchange.com/questions/10537/get-name-of-the-current-template-file/10565#10565 и вставить её в ваш functions.php

mark-in-motion mark-in-motion
5 мая 2021 г. 12:12:03

Для тех, кому лень читать полностью: get_current_template — это ПОЛЬЗОВАТЕЛЬСКАЯ функция, которую предлагает использовать @t31os. Просто перейдите по его ссылкам, чтобы увидеть, как это реализовано. Функция get_page_template бесполезна — она работает только для обычных страниц. Обратитесь к документации WordPress для уточнений. Насколько мне известно, предложенное здесь решение — единственный универсальный способ определить текущий шаблон во всех случаях.

User User
19 авг. 2021 г. 13:44:02
Показать остальные 2 комментариев
2
44

Что ж, если вам просто нужно узнать, какой файл шаблона использовался для генерации текущей страницы, то вам не обязательно пачкать руки кодом ;)

Есть удобный плагин под названием Debug Bar. Это отличный помощник во многих ситуациях, включая вашу. Вам определённо стоит его попробовать — для меня и многих других это обязательный инструмент в разработке на WordPress.

Я прикрепил скриншот, который может заставить вас влюбиться...

Debug Bar в действии

Чтобы заставить Debug Bar работать, вам нужно включить опции wp_debug и wp_savequeries. Эти опции по умолчанию отключены.

Прежде чем вносить какие-либо изменения, учтите несколько моментов:

  • Не делайте этого в рабочей среде, если только сайт не обслуживает небольшой трафик.
  • После завершения отладки обязательно отключите эти опции (особенно wp_savequeries, так как она влияет на производительность) сайта.

Чтобы внести изменения:

  1. Откройте файл wp_config.php через FTP-клиент.
  2. Найдите опцию wp_debug. Измените её на define( 'WP_DEBUG', true );. Если строка отсутствует, добавьте её в файл.
  3. Аналогично отредактируйте или добавьте строку define( 'SAVEQUERIES', true ); в файл.
  4. Сохраните. Теперь вы готовы к отладке.

Подробнее: Кодекс

26 дек. 2011 г. 20:16:25
Комментарии

@justCallMeBiru — плагин Debug Bar не требует WP_DEBUG и SAVEQUERIES, хотя они улучшают его функциональность.

Pat J Pat J
15 янв. 2014 г. 18:35:29

Запуск такого плагина только для одного небольшого фрагмента информации создаёт значительную нагрузку, на мой взгляд, поэтому я не предложил его в своём ответе. Тем не менее, очевидно, что людям больше нравится этот ответ, и мне интересно узнать, почему.

t31os t31os
28 янв. 2014 г. 18:02:08
2
44

Я использую эту удобную функцию, которая отображает текущий шаблон только для супер-администраторов:

function show_template() {
    if( is_super_admin() ){
        global $template;
        print_r($template);
    } 
}
add_action('wp_footer', 'show_template');

Надеюсь, это поможет. :)

23 янв. 2014 г. 15:06:41
Комментарии

Это основной ответ, его следует принять.

Hybrid Web Dev Hybrid Web Dev
13 мар. 2018 г. 02:21:32

Я тоже использую это, но по-прежнему не отображается, какой именно "include" используется, показывается только страница верхнего уровня.

Burndog Burndog
8 июл. 2020 г. 16:18:40
4
12

Добавьте следующий код сразу после строки get_header в каждом соответствующем файле шаблона:

<!-- <?php echo basename( __FILE__ ); ?> -->

В вашем браузере > просмотрите исходный код, и имя шаблона будет отображаться как комментарий в вашем HTML-коде, например:

<!-- page.php -->
27 дек. 2011 г. 20:32:43
Комментарии

слишком много усилий, чтобы добавлять это везде

Adal Adal
18 февр. 2019 г. 03:49:56

хахаха, зачем заморачиваться с этим, если ты собираешься помечать каждый файл — просто пометь его настоящим именем файла!

Aurovrata Aurovrata
9 мая 2020 г. 09:29:09

@Aurovrata это было давно. Сейчас есть гораздо лучшие решения. Но у меня был простой скрипт для вставки кода в начало всех файлов в папке, так что не требовалось жестко прописывать настоящие имена. Делалось за 1-2 секунды.

ronald ronald
20 мая 2020 г. 21:46:31

справедливо, :)

Aurovrata Aurovrata
21 мая 2020 г. 14:27:52
0

Вот решение:

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 в этой строке на нужное для разделения. Часто: class-wp-admin-bar.php

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

add_action('admin_bar_menu', 'my_adminbar_template_monitor', -5);

Приоритет -5 гарантирует, что функция выполнится первой. Ключевой момент — вызвать get_included_files() в нужный момент, иначе потребуется дополнительная обработка массива!

Разберём по шагам:

Вы не сможете собрать все включённые файлы шаблонов без PHP backtrace. Суперглобальные переменные внутри 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() должны остаться только файлы шаблонов.

/* Ключевая точка, нужно найти её позицию в массиве */
$path = str_replace('\\', '/', ABSPATH);
$key = $path.'wp-includes/template-loader.php';
$offset = array_search($key, $included_files);

/* Исключаем саму ключевую точку из нового массива */
$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>';

Возможно, потребуется доработка в части 3) — замена, если вы не хотите включать обязательные файлы плагинов. Они могут загружать class-файлы поздно и «вмешиваться» в процесс вывода шаблонов.

Однако, я считаю разумным оставить их видимыми, так как идея в отслеживании загруженного, даже если это не «шаблон», который выводит контент на данном этапе.

15 сент. 2017 г. 09:14:10
1

Существует ещё один более простой плагин, разработанный специально для этой цели. Я склоняюсь к установке Debug Bar, так как другие его функции выглядят полезными, но этот плагин более базовый и предназначен именно для данной задачи: http://wordpress.org/extend/plugins/what-the-file/

29 янв. 2013 г. 06:22:00
Комментарии

Сэкономил мне время.

m4n0 m4n0
11 дек. 2020 г. 16:08:22
0

Одна очень простая вещь, которую я делаю — это вставляю HTML-комментарий с указанием файла шаблона в каждом соответствующем файле темы. Например, в начале index.php у меня есть:

<!-- index -->

а в начале front-page.php:

<!-- front -->

Но очевидно, что это требует изменения темы. Я подозреваю, что можно добавить пользовательскую функцию в файл footer.php или header.php, которая будет указывать, какой файл используется. Указанный выше метод и схема иерархии шаблонов WordPress — это то, что я обычно использую.

24 дек. 2011 г. 22:40:49
0

Самый простой способ, который я нашёл, — это использовать функцию WordPress в теге body. Она добавит несколько классов в зависимости от того, какую страницу вы просматриваете (home для главной, page для страницы и т.д.).

Ознакомьтесь здесь: http://codex.wordpress.org/Function_Reference/body_class

Кроме того, это полезно для стилизации элементов с помощью CSS на этих страницах.

Как упомянул Дэвид Р., также полезно изучить Иерархию шаблонов (http://codex.wordpress.org/Template_Hierarchy).

25 дек. 2011 г. 14:51:51