从管理页面找出哪个WordPress模板用于页面

从管理页面找出哪个WordPress模板用于页面

问题描述:

我试图检索在仪表板的'编辑页面'页面上使用的模板的文件名/路径。从管理页面找出哪个WordPress模板用于页面

类似于wp-includes/template-loader.phpsource)在前端所做的:找出要渲染的模板。

不幸的是,像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); ?> 

显示:

默认

...这将是对家庭和page.php文件前page.php文件相同在另一个默认页面上,所以这对我没有帮助。

总之

我试图让当我编辑我的“主页”是front-page.php。或者当我在选择自定义模板的情况下编辑某个页面时,custom-template.php。或者当我编辑一个名为'关于'的页面时about-page.php。如何获得正确的文件名或路径?

+0

我已经找到了解决这个问题的方法,在前端添加一个包含模板文件名的元标记,并在后端使用php的get_meta_tags来获取正确的文件名。虽然这有效,但我想知道是否有更优雅的解决方案。现在开始赏金。 – kapser

+0

你如何运行上面的代码尝试?通过钩子? – Steve

+0

简而言之:元标记是使用'wp_head'挂钩插入的。使用类似[this one]的函数(https://github.com/WordPress/WordPress/blob/master/wp-includes/template-loader.php#L44),将正确的模板路径加载到元标记中。 然后,使用curl或get_meta_tags(试用它们都可以),我从后端读取meta标签。它的作品,但它感觉像一个肮脏的解决方案。 – kapser

使用get_page_template()

<?php echo realpath(get_page_template()); ?> 

它输出像/foo/bar/baz/wp-content/themes/your-theme/{page-template}.php

您可以选择不使用realpath()和刚刚得到的模板名称。

+0

这将返回页面模板设置为页面,而不是实际加载的模板。例如,在我正在编辑主页的仪表板中,当它实际加载'path/to/template/front-page.php'时,它会返回'path/to/template/page.php',因为Wordpress会优先考虑。 – kapser

+0

该函数返回分配给当前页面的模板。期。如果你得到“默认”或page.php,那么你没有在页面编辑屏幕上设置自定义模板...或者,它不会保存到数据库。 Wordpress加载分配给页面的模板,如果没有,它会根据模板层次结构自行设置默认值。如果这个函数没有给你你想要看到的东西,或者其他一些模板正在加载而不是这个函数给你的那个模板,那么你需要重新检查你的模板和声明。 – Spartacus

+0

确实,Wordpress遵循模板层次结构。这并不反映在get_page_template()的结果中。当我在文件'front-page.php'中回显你的函数时,我得到'page.php'。测试两个不同的主题。 – kapser

如果您的具体问题是主页,你可以使用的get_page_template()组合和编辑页面的ID与get_option('page_on_front')比较(见WordPress option reference)。还有一个选项,show_on_front,它表示首页是显示帖子还是静态页面。

也许这有帮助吗?我不知道是否有其他边缘情况下将使用不同的模板...

+0

谢谢,这确实有助于头版。不幸的是,我会考虑所有[模板层次结构](https://developer.wordpress.org/themes/basics/template-hierarchy/)案件边缘案例,这是很多。由于我正在编写一个适用于不同主题的插件,因此我不能只包含一些我需要的边缘案例。 – kapser

+0

是的,你可能会拼凑一些东西在一起检查可能的模板文件的存在,并将儿童主题等考虑在内......看起来它会变得很脆,你的卷曲可能是更实用的解决方案 – klumme