Intereting Posts
Я не могу получить доступ к функциям wordpress из вызова ajax php Как переместить родительский li в конец дочернего ul В основном, противоположный многосайтовый URL-адрес, который задают большинство людей изображение, загруженное не может быть показано Этот код не найдет страницу авторов? Загрузите изображение с URL-адреса и назначьте его как избранное изображение в пользовательский тип сообщения? Поворот фоновых изображений с настройками администратора Может ли кто-нибудь помочь мне исправить эту ошибку WordPress Missing Argument? Как добавить галерею slug в url приложения? Храните размещенное на сайте содержание с оригинальным заказом Гравитационные формы – получить атрибут shortcode из сообщения ВСТАВКА Данные в таблицу с заполнителями Есть ли крючки для обновлений WordPress? Удалить все изображения продуктов в phpmyadmin Вызов неопределенной ошибки функции в плагине

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

Я нашел это, чтобы отобразить текущее имя файла, используемого в шаблоне:

function get_template_name () { foreach ( debug_backtrace() as $called_file ) { foreach ( $called_file as $index ) { if ( !is_array($index[0]) AND strstr($index[0],'/themes/') AND !strstr($index[0],'footer.php') ) { $template_file = $index[0] ; } } } $template_contents = file_get_contents($template_file) ; preg_match_all("Template Name:(.*)\n)siU",$template_contents,$template_name); $template_name = trim($template_name[1][0]); if ( !$template_name ) { $template_name = '(default)' ; } $template_file = array_pop(explode('/themes/', basename($template_file))); return $template_file . ' > '. $template_name ; } 

Источник: получить имя шаблона страницы на странице.

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

Скриншот

Кто-нибудь знает, как это исправить? Я даже не знаю, почему эта функция вызывается в бэкэнд. Есть ли условная функция, такая как is_frontend() – может быть, это решило бы проблему?

Solutions Collecting From Web of "Получить имя текущего файла шаблона"

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

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

Пример кода:
Две функции, одна для установки глобальной, одна для вызова.

 add_filter( 'template_include', 'var_template_include', 1000 ); function var_template_include( $t ){ $GLOBALS['current_theme_template'] = basename($t); return $t; } function get_current_template( $echo = false ) { if( !isset( $GLOBALS['current_theme_template'] ) ) return false; if( $echo ) echo $GLOBALS['current_theme_template']; else return $GLOBALS['current_theme_template']; } 

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

Для шаблонов страниц is_page_template() , имея в виду, что это поможет только в случае шаблонов страниц (гораздо меньше уловить все функции).

Информация о функциях, используемых или упомянутых выше:

  • is_page_template ()
  • add_filter ()
  • базовое ()

видимо, этого достаточно:

 add_action('wp_head', 'show_template'); function show_template() { global $template; echo basename($template); } 

или просто использовать его непосредственно в шаблоне (я, как правило, эхо в footer.php в комментарии HTML)

 <?php global $template; echo basename($template); ?> 

Между встроенными функциями WP, такими как get_template_part (), и родной язык PHP, включает в себя самый надежный способ увидеть используемые файлы тем, чтобы получить список всех включенных файлов и отфильтровать все, что не принадлежит теме (или темы, когда используется комбинация родителей и детей) :

 $included_files = get_included_files(); $stylesheet_dir = str_replace( '\\', '/', get_stylesheet_directory() ); $template_dir = str_replace( '\\', '/', get_template_directory() ); foreach ( $included_files as $key => $path ) { $path = str_replace( '\\', '/', $path ); if ( false === strpos( $path, $stylesheet_dir ) && false === strpos( $path, $template_dir ) ) unset( $included_files[$key] ); } var_dump( $included_files ); 

Добавление (более сладкий код) к другим ответам здесь.

Имя Шаблона

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

 is_page() AND print get_page_template_slug( get_queried_object_id() ); 

Имя файла

Когда вы просто хотите повторить текущее имя файла шаблона , перейдите к следующему

Изменить: вот новая версия плагина, завернутого в класс. Он показывает как текущее имя файла шаблона, так и имя файла иерархии шаблона в конце завершения работы в самой нижней части страницы.

Что плагин говорит вам:

  • Является ли шаблон родителем темы child / current?
  • Является ли шаблон поданным из подпапки? Если да: Сообщает вам имя
  • Имя файла шаблона.

Просто скопируйте следующий код в файл и назовите его wpse10537_template_info.php , загрузите его в свой каталог плагинов и активируйте его.

 <?php /** Plugin Name: (#10537) »kaiser« Get Template file name */ if ( ! class_exists( 'wpse10537_template_name' ) ) { add_action( 'plugins_loaded', array( 'wpse10537_template_name', 'init' ) ); class wpse10537_template_name { protected static $instance; public $stack; public static function init() { is_null( self :: $instance ) AND self :: $instance = new self; return self :: $instance; } public function __construct() { if ( is_admin() ) return; add_action( 'wp', array( $this, 'is_parent_template' ), 0 ); add_action( 'wp', array( $this, 'get_template_file' ) ); add_action( 'template_include', array( $this, 'get_template_name' ) ); add_action( 'shutdown', array( $this, 'get_template_name' ) ); } public function get_template_name( $file ) { if ( 'template_include' === current_filter() ) { $this->to_stack( "Template file" ,basename( $file ) ); return $file; } // Return static var on echo call outside of filter if ( current_user_can( 'manage_options' ) AND defined( 'WP_DEBUG' ) AND WP_DEBUG ) return print implode( " &ndash; ", $this->stack ); } public function get_template_file() { if ( ! is_post_type_hierarchical( get_post_type() ) ) return; $slug = get_page_template_slug( get_queried_object_id() ); if ( ! strstr( $slug, "/" ) ) return $this->to_stack( "Template", $slug ); $this->to_stack( "Subdirectory" ,strstr( $slug, "/", true ) ); $this->to_stack( "Template (in subdirectory)" ,str_replace( "/", "", strstr( $slug, "/" ) ) ); } public function is_parent_template() { if ( ! is_null( wp_get_theme()->parent ) ) return $this->to_stack( 'from parent theme' ); $this->to_stack( 'from current/child theme' ); } public function to_stack( $part, $item = '' ) { $this->stack[] = "{$part}: {$item}"; } } // END Class wpse10537_template_name } // endif; 

Этот плагин может работать как MU-Plugin.

Затем вы можете просто вызвать wpse10537_get_template_name() в любой точке (например, в шаблоне темы). Это позволяет избежать загромождения глобального пространства имен.

Имя шаблона сохраняется в таблице postmeta, поэтому все, что вам нужно сделать, это поместить это где-то в ваш цикл:

 $template = get_post_meta( $post->ID, '_wp_page_template', true ); echo "Template: " . $template; 

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

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

 if ( is_page() && $current_template = get_page_template_slug( get_queried_object_id() ) ){ $templates = wp_get_theme()->get_page_templates(); $template_name = $templates[$current_template]; } 

Я хотел получить имя шаблона, потому что мне очень body_class имена классов body_class которые встроена в WordPress body_class когда вы используете шаблон. К счастью, в самом конце этой функции есть фильтр-крючок, чтобы вы могли добавлять свои собственные имена классов. Вот мой фильтр. Надеюсь, кто-то сочтет это полезным:

 add_filter( 'body_class', 'gs_body_classes', 10, 2 ); function gs_body_classes( $classes, $class ){ if ( is_page() && $current_template = get_page_template_slug( get_queried_object_id() ) ){ $templates = wp_get_theme()->get_page_templates(); $template_name = str_replace( " ", "-", strtolower( $templates[$current_template] ) ); $classes[] = $template_name; } return $classes; } 

Этот фильтр примет все, что вы назвали своим шаблоном страницы, замените пробелы тире и сделайте все в нижнем регистре, чтобы он выглядел как все остальные классы WordPress.

Проблема с линией preg_match_all . Попробуйте это вместо этого:

 preg_match_all("/Template Name:(.*)\n/siU",$template_contents,$template_name); 

Кроме того, вы можете использовать if (!is_admin()) { .... } для запуска только на интерфейсе.

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

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

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

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

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

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

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

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

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

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

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

Большую часть времени вы хотели бы:

 $template = get_current_loaded_template(); if($template == 'single-product.php') add_filter('the_title' .... if($template == 'format-gallery.php') add_action('post_thumbnail' .... 

Но это невозможно, если шаблон загружается вне основного метода WordPress get_template_part . Вместо этого переработайте свои потребности! Возможно, loop_start() , in_the_loop() и add_action('the_post') имеют add_action('the_post') решение, чтобы изменять данные в зависимости от шаблона, который будет загружаться для каждой записи в цикле.

 global $post; $templateName = get_page_template_slug( $post->ID ); //echo $templateName; var_dump( $templateName );