Узнайте, какой шаблон 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

Я знаю, что это некрасиво, но я просто не мог найти способ не использовать эту глобальную переменную.

Другие вопросы по тегам