Узнайте, какой шаблон Wordpress используется для страницы со страницы администратора
Я пытаюсь получить имя файла / путь к шаблону, который используется на странице "Редактировать страницу" на панели инструментов.
Похоже на то, что wp-includes/template-loader.php
( источник) делает на переднем конце: выяснение, какой шаблон для визуализации.
К сожалению, выражения как is_front_page()
- какой WordPress template-loader.php
использует, чтобы выяснить, следует ли использовать get_front_page_template()
- не работает правильно на странице администратора. Что и следовало ожидать, потому что эти выражения используют глобальный объект $wp_query, а не текущий запрос.
Что я пробовал до сих пор:
Запуск цикла сообщений на странице администратора
$args = array(
'p' => get_the_ID(),
'post_type' => 'any'
);
$query = new \WP_Query($args);
if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); ?>
<?= the_title(); ?><br>
Is front page: <?= is_front_page() ? 'true' : 'false' ?>
<?php endwhile; endif; ?>
Вывод:
Главная
Является ли главная страница ложной
Использование get_post_meta
<?= get_post_meta(get_the_ID(), '_wp_page_template', true); ?>
Вывод:
дефолт
... что было бы одинаково для front-page.php на Home и page.php на другой странице по умолчанию, так что это мне не поможет.
Короче
То, что я пытаюсь получить, это front-page.php
когда я редактирую свою "домашнюю" страницу. Или же custom-template.php
когда я редактирую какую-то страницу с выбранным пользовательским шаблоном. Или же about-page.php
когда я редактирую страницу под названием "О нас". Как получить правильное имя файла или путь?
2 ответа
Если ваша конкретная проблема связана с домашней страницей, вы можете использовать комбинацию get_page_template()
и сравнивая идентификатор отредактированной страницы с get_option('page_on_front')
(см. ссылку на опцию WordPress). Там также вариант, show_on_front
, который указывает, показывает ли первая страница сообщения или статическую страницу.
Может это поможет? Я не знаю, есть ли другие крайние случаи, когда будет использоваться другой шаблон...
Использование get_page_template()
:
<?php echo realpath(get_page_template()); ?>
Выводит что-то вроде /foo/bar/baz/wp-content/themes/your-theme/{page-template}.php
Вы можете не использовать realpath()
и просто получить имя шаблона.
Единственное решение, которое я нашел, это следующее:
global $template;
echo basename($template); // front-page.php
Я знаю, что это некрасиво, но я просто не мог найти способ не использовать эту глобальную переменную.