Как узнать, какой шаблон страницы обслуживает текущую страницу?
-
-
Я просматриваю html и нахожу идентифицированный тег или что-то уникальное.I inspect the html and find an identified tag or something unique.
- 1
- 2011-12-27
- Naoise Golden
-
Просмотрите исходный код и найдите классы тела,которые сообщают вам,какой шаблон используется.Также дает вамi.d.View the source code and look for the body classes which tell you which template is used. Also gives you the i.d.
- 1
- 2014-02-04
- Brad Dalton
-
Возможный дубликат [Получить имя текущего файла шаблона] (https://wordpress.stackexchange.com/questions/10537/get-name-of-the-current-template-file)Possible duplicate of [Get name of the current template file](https://wordpress.stackexchange.com/questions/10537/get-name-of-the-current-template-file)
- 0
- 2017-06-13
- Burgi
-
@BradDalton +1.Особенно,когда нам не разрешено устанавливать плагин или писать функцию для достижения цели.@BradDalton +1. Specially when we are not allowed to install a plugin or write a function to achieve the goal.
- 0
- 2018-07-13
- Subrata Sarkar
-
9 ответ
- голосов
-
- 2011-12-26
Подключитесь к
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() ); ?>
Теперь вы можете отслеживать,какие просмотры используют какой шаблон,и при этом скрывать эту информацию от посетителей.
Hook onto
template_include
, set a global to note the template set by the theme then read that value back into the footer or header to see which template is being called for a given view.I spoke about this filter hook before in Get name of the current template file, but go grab a copy of that code and plonk it your theme's
functions.php
file.Then open up the theme's
header.php
orfooter.php
(or wherever you like) and use something like the following to print out the current template.<div><strong>Current template:</strong> <?php get_current_template( true ); ?></div>
If you wanted to use this on a production site and keep that info away from your non-administrator users, add a little conditional logic.
<?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() ); ?>
Now you can keep track of what views are using what template, whilst keeping that info away from your visitors.
-
Если с этим ответом что-то не так или кто-то может прокомментировать,что можно сделать,чтобы улучшить этот ответ,оставьте комментарий здесь и поделитесь своими мыслями и идеями о том,как его улучшить.If there is something wrong with this answer, or if anyone could provide comments on what could be done to improve this answer, have at it, drop a comment here and share your thoughts and ideas on how to make it better.
- 1
- 2014-01-28
- t31os
-
Не сработало братан,там написано "Неопределенная функция"It didn't work bro, it says "Undefined function"
- 1
- 2016-04-27
- Lucas Bustamante
-
@LucasB то же самое здесь,это ошибка,которую я получил@LucasB same here, that's the error I got
- 1
- 2017-01-07
- Lincoln Bergeson
-
Это должно быть [`get_page_template`] (https://codex.wordpress.org/Function_Reference/get_page_template)This should be [`get_page_template`](https://codex.wordpress.org/Function_Reference/get_page_template)
- 2
- 2017-08-11
- Blazemonger
-
get_current_template не является функцией,аget_page_template для меня ничего не печатает (страница woocommerce).`get_current_template` is not a function and `get_page_template` prints nothing for me (a woocommerce page).
- 0
- 2020-06-27
- run_the_race
-
- 2011-12-26
Что ж,если все,что вам нужно,это проверить,какой файл шаблона был использован для создания текущей страницы,тогда вам не нужно пачкать руки кодом;)
Есть удобный плагин под названием Debug Bar . Это отличный помощник во многих ситуациях,в том числе и в вашей. Вам обязательно стоит проверить это - для меня и многих других это обязательный компаньон для любой разработки WP.
Я приложил скриншот,который может заставить вас влюбиться ...
Чтобы панель отладки заработала ,необходимо включить параметры
wp_debug
иwp_savequeries
. По умолчанию эти параметры отключены.Прежде чем вносить какие-либо изменения,следует помнить о нескольких моментах:
- Не делайте этого в производственной среде,если веб-сайт не обслуживает большой трафик.
- После завершения отладки обязательно отключите параметры (особенно параметр wp_savequeries,поскольку он влияет на производительность) веб-сайта.
Чтобы внести изменения:
- Откройте файл
wp_config.php
черезftp-клиент. - Найдите параметр
wp_debug
. Измените его наdefine( 'WP_DEBUG', true );
. Если строки нет,добавьте ее в файл. - Аналогичным образом отредактируйте или добавьте строку
define( 'SAVEQUERIES', true );
в файл. - Сохранить. Вы готовы к отладке.
Дополнительная информация: Кодекс
Well, if all you want is to check which template file has been used to generate the current page then you don't need to get your hands dirty with code ;)
There's this handy plugin called Debug Bar. It's a great helper in many situations including yours. You should definitely check it out - for me and many others it's a must-have companion for any WP development.
I've attached a screenshot that could make you fall in love...
To get the Debug Bar working, you need to enable
wp_debug
andwp_savequeries
options. These options are in disabled state by default.Before you make any changes though, there are a few points to keep in mind:
- Do not do it in production environment unless the website doesn't cater to a lot of traffic.
- Once you finish debugging, ensure to disable the options (especially the wp_savequeries option since it affects the performance) of the website.
To make the changes:
- Open
wp_config.php
file through a ftp client. - Search for
wp_debug
option. Edit it todefine( 'WP_DEBUG', true );
. If the line is not present, add it to the file. - Similarly, edit or add the line
define( 'SAVEQUERIES', true );
to the file. - Save. You are ready to debug.
More info: Codex
-
@justCallMeBiru - плагин Debug Bar * не требует * WP_DEBUG и SAVEQUERIES,хотя они * улучшают его.@justCallMeBiru -- the Debug Bar plugin doesn't *require* `WP_DEBUG` and `SAVEQUERIES`, though it is *enhanced* by them.
- 2
- 2014-01-15
- Pat J
-
Запуск такого плагина только для одного небольшого количества информации создает много накладных расходов,imho,и поэтому я не предлагал его в своем собственном ответе.Тем не менее,очевидно,что люди предпочитают этот ответ,хотя мне любопытно узнать,почему.Running such a plugin, just for one tid bit of information creates alot of overhead imho, and thus it is why i did not suggest it in my own answer. That said, clearly people prefer this answer, i'm curious to know why though.
- 3
- 2014-01-28
- t31os
-
- 2014-01-23
Я использую эту удобную функцию,которая отображает текущий шаблон только для суперадминистраторов:
function show_template() { if( is_super_admin() ){ global $template; print_r($template); } } add_action('wp_footer', 'show_template');
Надеюсь,это поможет.:)
I use this handy function that displays the current template only for super admins:
function show_template() { if( is_super_admin() ){ global $template; print_r($template); } } add_action('wp_footer', 'show_template');
Hope that helps. :)
-
Это ответgoto,его следует принять.This is the goto answer, should be accepted.
- 3
- 2018-03-13
- Hybrid Web Dev
-
Я также использую это,но ему все еще не хватает отображения того,какой «include» используется,и отображается только страница верхнего уровня.I use this also but it still lacks the display of which “include” is being used and only shows the top level page.
- 0
- 2020-07-08
- Burndog
-
- 2011-12-27
Добавьте следующий код сразу после строкиget_header в каждый соответствующий файл шаблона:
<!-- <?php echo basename( __FILE__ ); ?> -->
В вашем браузере> просмотрите исходный код,и имя шаблона будет отображаться в виде комментария в вашем html-коде,например
<!-- page.php -->
Add the following code right after the get_header line in each relevant template file:
<!-- <?php echo basename( __FILE__ ); ?> -->
In your browser > view source, and the template name will be displayed as a comment in your html code, e.g.
<!-- page.php -->
-
слишком много усилий,чтобы добавить это вездеit's too much effort to add this everywhere
- 0
- 2019-02-18
- Adal
-
хахаха,зачем возиться с этим,если вы собираетесь пометить каждый файл,а затем просто пометить его фактическим именем файла!hahaha, why bother with this if you're going to label each file then simply label it with its actual file name!
- 0
- 2020-05-09
- Aurovrata
-
@Aurovrata это было очень давно.Есть гораздо лучшие решения.Но у меня был простой сценарий для вставки кода в начало всех файлов в папке,поэтому не требовалось жесткого кодирования фактических имен.Делается за 1 или 2 секунды.@Aurovrata it was a long time ago. There are way better solutions. But I had a simple script to insert the code at the top of all files in a folder, so no hardcoding of actual names required. Done in 1 or 2 seconds.
- 0
- 2020-05-20
- ronald
-
справедливо,:)fair enough, :)
- 0
- 2020-05-21
- Aurovrata
-
- 2017-09-15
Вот:
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
в этой строке кода на:filname,от которого нужно оторваться. Часто:class-wp-admin-bar.php
если вам это нужно на панели администратора, используйте правильную приоритетность (самое раннее) ,чтобы убедиться,что в конце этого списка нет файлов. Например:
add_action('admin_bar_menu', 'my_adminbar_template_monitor', -5);
priority
-5
убедитесь,что он загружается первым. Ключ состоит в том,чтобы вызватьget_included_files()
в нужный момент,иначе потребуется некоторое извлечение массива!Чтобы разбить это:
Вы не можете собрать все включенные файлы шаблонов без отслеживания PHP. Суперглобальные объекты внутри
template_include
не собирают их все . Другой способ - «поместить маркер» в каждый файл шаблона,но если вам нужно сначала взаимодействовать с файлами,вы теряете время и всю идею.1) Нам нужно проверить все файлы,которые использовались текущим запросом Wordpress. А их много! Не удивляйтесь,если вы используете 300 файлов еще до того,как будет зарегистрирован вашfunctions.php.
$included_files = str_replace('\\', '/', get_included_files());
Мы используем собственный PHPget_included_files (),конвертируя обратную косую черту в прямую косую черту,чтобы соответствовать большинству путей возврата Wordpress.
2) Мы вырезаем тот массив,из которого зарегистрированtemplate-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>';
Последняя модификация может потребоваться в части 3) -replacement ,если вы не хотите,чтобы обязательные включения от плагины. Они могут вызывать
class-files
поздно и «перехватывать» во время обработки вывода шаблона.Однако я счел разумным оставить их видимыми,поскольку идея состоит в том,чтобы отслеживать,что было загружено ,даже если это не "шаблон",отображающий вывод на этом этапе.
Here you go:
A HTML-list with all template files in use for the current landing page, including all template-parts from plugins, child theme and/ or parent theme combinations, all in one line of code:
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>';
You MAY need to check that your server does not returning dubble slashes at any path. Remember to place this after all template files actually been used, like in footer.php, but before admin bar renders.
if
admin-bar stuff
path is showing at the top, or any other file, change the filenametemplate-loader.php
in this line of code to: whatever filname you need to break from. Often:class-wp-admin-bar.php
if you need this in the admin bar, use the right priotity (earliest) to make shure no files are entered at the end of this list. For example:
add_action('admin_bar_menu', 'my_adminbar_template_monitor', -5);
priority
-5
make shure it loads first. The key is to callget_included_files()
at the right moment, otherwise some array-popping needed!To break this up:
You can not collect all included template files without PHP backtrace. Superglobals inside
template_include
wont collect them all. The other way is to "place a marker" in each template file, but if you need to interact with the files first, you hazzle with time and the whole idea.1) We need to check inside all the files that have been used by current Wordpress request. And they are many! Dont be surprised if you are using 300 files before even your functions.php is registered.
$included_files = str_replace('\\', '/', get_included_files());
We are using the PHP native get_included_files(), converting backslashes to forward slashes to match most of Wordpress returning paths.
2) We are cutting that array from where the template-loader.php is registered. After that, the populated get_included_files() should only have template files populated.
/* 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) Shorten down the results, we dont need the path until theme folder or plugin folder, as templates in use, can be mixed from plugins, theme or child theme folders.
$replacement = $path.'wp-content/'; $output = str_replace($replacement, '', $output);
4) Finally, convert from array to a nice HTML list
$output = '<ul><li>'.implode('</li><li>', $output).'</li></ul>';
A last modification might be needed in part3) -replacement, if you dont want required includes by plugins. They might call
class-files
late, and "intercept" during the template output processing.However, I found it reasonable to leave them visible, as the idea is to track whats been loaded, even if it is not a "template" that rendering output in this stage.
-
- 2011-12-25
Самый простой способ,который я нашел,- это включить функцию WordPress в тегbody.Он добавит несколько классов в зависимости от того,какую страницу вы просматриваете (главная страница для первой,страница для страницы и т. Д.).
Взгляните здесь: http://codex.wordpress.org/Function_Reference/body_class
Кроме того,это полезно для нацеливания на элементы с помощью CSS на этих страницах.
Знакомство с иерархией шаблонов (http://codex.wordpress.org/Template_Hierarchy),о которой упоминал Дэвид Р.,также является хорошей идеей.
Easiest way I've found is to include the WordPress function on the body tag. It'll add several classes depending on which page you're viewing (home for the front, page for page, etc).
Check it out here: http://codex.wordpress.org/Function_Reference/body_class
Plus it's helpful for targeting elements with CSS on those pages.
Getting to know the Template Hierarchy (http://codex.wordpress.org/Template_Hierarchy) as David R mentioned is also a good idea.
-
- 2013-01-29
Специально для этой цели есть еще один плагин,более простой.Я склоняюсь к установке панели отладки,потому что эти другие функции выглядят полезными,но эта более простая и предназначена специально для этой цели: http://wordpress.org/extend/plugins/what-the-file/а>
There's another more bare-bones plugin specifically for this purpose. I'm leaning towards installing the debug bar, because those other features look useful, but this one is more basic and specifically for this purpose: http://wordpress.org/extend/plugins/what-the-file/
-
- 2011-12-24
Я делаю очень простую вещь - вставляю HTML-комментарий,идентифицирующий файл шаблона,в каждый соответствующий файл темы,например,вверхуindex.php,который у меня есть
<!-- index -->
и вверху файлаfront-page.php
<!-- front -->
Но,очевидно,для этого нужно изменить тему.Я подозреваю,что вы можете добавить специальную функцию в файлfooter.php или header.php,который сообщит вам,какой файл используется.Я предпочитаю описанный выше метод и справочную таблицу http://codex.wordpress.org/Template_Hierarchy использовать.
One very simple thing I do is to insert an HTML comment identifying the template file in each relevant file of the theme, eg at the top of index.php I have
<!-- index -->
and at the top of front-page.php
<!-- front -->
But obviously that requires modifying the theme. I suspect you could add a custom function in the footer.php file or header.php which would tell you what file was being used. The above method and the reference chart http://codex.wordpress.org/Template_Hierarchy are what I tend to use.
-
- 2011-12-26
Существует плагин Theme Check ,который выполняет именно это.Он отображает имя текущего файла шаблона,который используется в качестве комментария HTML.
There is a plugin named Theme Check which does exactly this. It displays the name of the current template file in use as a HTML comment.
Когда вы активируете тему WordPress,всегда сложно определить,в какой файл перейти,чтобы что-то изменить. Есть идеи,как упростить вещи?
Но с другой стороны,учитывая функциональностьget_template_part,это может быть невозможно.Что скажешь?