【发布时间】:2018-02-08 11:16:56
【问题描述】:
我正在尝试检索仪表板中“编辑页面”页面上使用的模板的文件名/路径。
类似于wp-includes/template-loader.php (source) 在前端所做的:找出要渲染的模板。
不幸的是,像 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 和另一个默认页面上的 page.php,这将是相同的,所以这对我没有帮助。
简而言之
当我编辑我的“主页”页面时,我想要得到的是front-page.php。或者custom-template.php,当我在选择自定义模板的情况下编辑某些页面时。或者about-page.php,当我正在编辑一个名为“关于”的页面时。如何获取正确的文件名或路径?
【问题讨论】:
-
我通过在前端添加一个包含模板文件名的元标记并从后端使用 php 的
get_meta_tags来获取正确的文件名,找到了解决此问题的方法。虽然这可行,但我想知道是否有更优雅的解决方案。现在开始赏金。 -
你是如何运行上面的代码尝试的?通过钩子?
-
简而言之:使用
wp_head钩子插入元标记。使用与this one 类似的函数,将正确的模板路径加载到元标记中。然后,使用 curl 或 get_meta_tags (都试过了,都有效),我从后端读取了那个元标记。它有效,但感觉像是一个肮脏的解决方案。 -
一周后:感谢您的回复,尽管我没有找到更好的解决方案。当我在管理页面上时,我仍然无法获取加载的 REAL 模板文件,除非使用 curl 技巧在上面评论中描述的前端加载页面,我现在将继续使用.
标签: php wordpress templates admin