Intereting Posts
wp_dequeue_style не работает как обрабатывать цикл, используя заполняющую структуру сетки бутстрапа? Вход Api с Meta_key и Meta_value Запрос пользовательской почты по таксономии Какой URL указывает на какой файл Пользовательский тип сообщения с использованием стандартных категорий сообщений приводит к 404 при просмотре / cpt / category Аудио-плейлист: как связать события для «изменения трека», «конец трека»? Предупреждение. Произошла непредвиденная ошибка. Что-то может быть неправильно с WordPress.org Используйте страницу выбора страниц на странице создания WordPress Внутреннее присоединение переопределяет get_field плагина расширенного пользовательского поля Использование пользовательских параметров значения в PHP Получение содержимого div в WordPress? Как я могу отлаживать TTFB в WP? WordPress вызывает страницу архива вместо шаблона пользовательской страницы Как удалить pingback из головы?

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

В основном я хочу видеть имена файлов в интерфейсе – не только шаблоны, например, шаблоны категорий / страниц, но и файлы темы, такие как header.php / sidebar.php / footer.php и т. Д.

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

Я не могу найти что-то, что даст мне PHP-объект для меня var_dump и посмотреть, что доступно, или крючок, которым я могу манипулировать. Это действительно существует, или я хватаюсь за соломинку?

То, что я изучил до сих пор:

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

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

  • Получить имя текущего файла шаблона

    Это аналогичная проблема, как и первый вопрос, и по-прежнему использовать ответ t310s в качестве ссылки.

  • Также рассмотрел функцию wp_get_theme , но этот объект дает мне информацию о самой теме, а не о массиве или списке файлов.

Моя цель – написать функцию, которая будет динамически отображать все имена файлов или фрагменты в том, что просматривается на интерфейсе. Таким образом, «Страница» будет, например, echo page.php, sidebar.php, footer.php и header.php.

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

PHP имеет функцию get_included_files() , которая возвращает все файлы, которые были включены во время запроса.

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

Вам нужен способ:

  • Отфильтруйте файлы, не относящиеся к теме и дочерней теме (если есть)
  • Включать только файлы, загруженные после включения основного шаблона

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

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

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

Вот класс, который реализует сказанное выше. Поместите файл и потребуйте от functions.php :

 class IncludedPartGrabber { private $main; private $root; private $switch = false; public function setup( $template ) { $this->root = wp_normalize_path( get_theme_root() ); // theme folder $this->main = wp_normalize_path( $template ); // main template return $template; } public function grab() { return array_filter( get_included_files(), array( $this, 'filter' ) ); } private function filter( $file ) { $norm = wp_normalize_path( $file ); if ( $norm === $this->main ) $this->switch = TRUE; // after main template all files are good to be included return $this->switch && strpos( $norm, $this->root ) === 0; // true if file is in theme dir } } 

Используйте его так, в ваших functions.php :

 $grabber = new IncludedPartGrabber; add_action( 'template_include', array( $grabber, 'setup' ) ); add_action( 'wp_footer', function() use($grabber) { echo '<pre>'; print_r( $grabber->grab() ); // see your footer :) echo '</pre>'; } ); 

Если вы хотите использовать внутри файла шаблона, в functions.php поставьте:

 global $grabber; $grabber = new IncludedPartGrabber; add_action( 'template_include', array( $grabber, 'setup' ) ); 

а затем в файле шаблона, например footer.php :

 <pre><?php print_r( $GLOBALS['grabber']->grab() ); ?></pre> 

Конечно, вы можете использовать и в header.php , но из этого файла вы получите только файлы, загруженные в момент включения header.php , например page.php и header.php . PHP – это язык программирования, а не волшебная машина, и не может знать, какие файлы будут включены, прежде чем они будут включены.

get_header , get_footer и get_sidebar имеют соответствующие действия, которые передают имя в качестве аргумента, поэтому вы можете перехватывать эти действия, проверять их существование через locate_template и записывать имена.

get_template_part есть действие, но оно динамическое и включает в себя пули, поэтому, если вы не знаете пули, их будет сложно зацепить. что вы можете сделать, это перехватить all , а строка соответствует первой части действия get_template_part_ , что и является тем, что делает этот плагин What the File :

 add_action( 'all', 'save_template_parts', 1, 3 ); function save_template_parts( $tag, $slug = null, $name = null ) { if ( 0 !== strpos( $tag, 'get_template_part_' ) ) { return; } // Check if slug is set if ( $slug != null ) { // Templates array $templates = array(); // Add possible template part to array if ( $name != null ) { $templates[] = "{$slug}-{$name}.php"; } // Add possible template part to array $templates[] = "{$slug}.php"; // Get the correct template part $template_part = str_replace( get_template_directory() . '/', '', locate_template( $templates ) ); $template_part = str_replace( get_stylesheet_directory() . '/', '', $template_part ); // Add template part if found if ( $template_part != '' ) { // log $template_part } } } 

Играйте вместе с:

 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>'; 

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

Написано по адресу:

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

если путь к файлу admin-bar stuff отображается вверху или любой другой файл, измените имя_файла template-loader.php в этой строке кода на: любое filname, с которым вам нужно сломаться.

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

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

priority -5 make shure сначала загружает. Ключ должен сделать эту линию в нужный момент.

Сделайте некоторые изменения, если ваш сервер использует dubble-slashes.