Как вы узнаете, какая страница шаблона обслуживает текущую страницу?


54

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

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


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

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

Возможный дубликат Get name текущего файла шаблона
Burgi

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

Ответы:


34

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

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

Затем откройте тему header.phpили footer.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() ); 
?>

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


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

1
Это не сработало, братан, он говорит «Неопределенная функция»
Лукас Бустаманте

1
@LucasB то же самое, вот ошибка, которую я получил
Линкольн Бергесон

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

40

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

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

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

введите описание изображения здесь

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

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

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

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

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

Больше информации: Кодекс


2
@justCallMeBiru - плагин панели отладки не требует WP_DEBUG и SAVEQUERIES, хотя он улучшен ими.
Пэт Дж

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

23

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

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

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


2
Это ответ goto, должен быть принят.
Гибридная сеть Dev

12

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

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

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

<!-- page.php -->

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

4

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

Проверьте это здесь: http://codex.wordpress.org/Function_Reference/body_class

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

Знакомство с иерархией шаблонов (http://codex.wordpress.org/Template_Hierarchy), как упоминал Дэвид Р., также является хорошей идеей.


4

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


3

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

<!-- index -->

и в верхней части front-page.php

<!-- front -->

Но очевидно, что это требует изменения темы. Я подозреваю, что вы можете добавить пользовательскую функцию в файл footer.php или header.php, которая сообщит вам, какой файл используется. Приведенный выше метод и справочная таблица http://codex.wordpress.org/Template_Hierarchy - это то, что я склонен использовать.


3

Существует плагин под названием Theme Check, который делает именно это. Он отображает имя текущего файла шаблона, используемого в качестве комментария HTML.


3

Ну вот:

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. И их много! Не удивляйтесь, если вы используете 300 файлов до того, как ваш файл functions.php будет зарегистрирован.

$included_files = str_replace('\\', '/', get_included_files());

Мы используем PHP get_included_files () для преобразования обратной косой черты в прямую, чтобы соответствовать большинству возвращаемых путей Wordpress.

2) Мы вырезаем этот массив, из которого зарегистрирован шаблон-loader.php. После этого заполненный get_included_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) Сократите результаты, нам не нужен путь, пока папка темы или папка плагина, как используемые шаблоны , не могут быть смешаны из плагинов, папок тем или дочерних тем.

$replacement = $path.'wp-content/';
$output = str_replace($replacement, '', $output);

4) Наконец, конвертировать из массива в красивый список HTML

$output = '<ul><li>'.implode('</li><li>', $output).'</li></ul>';

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.