我正在创建自定义插件,在我的插件文件中,我有以下内容:
add_filter(\'page_template\', \'load_tq_templates\');
function load_tq_templates() {
if (is_page( \'transport-quote-1\' )) {
if ( $overridden_template = locate_template( \'tq-1.php\' ) ) {
// locate_template() returns path to file
// if either the child theme or the parent theme have overridden the template
load_template( $overridden_template );
} else {
// If neither the child nor parent theme have overridden the template,
// we load the template from the \'templates\' sub-directory of the directory this file is in
load_template( dirname( __FILE__ ) . \'/templates/tq-1.php\' );
}
}
}
我已经在我的插件目录中创建了子文件夹“themes”,其中包含文件
tq-1.php
看起来像这样:
<?php get_header(); ?>
<div class="wrapper">
<h1>THIS IS MY CUSTOM THEME FOR PAGE tq-1</h1>
<div id="content">
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<?php the_content(); ?>
<?php endwhile; endif; ?>
</div>
</div>
<?php get_footer(); ?>
问题是,文件确实被加载到了相应的页面上,但加载后活动主题的
page.php
也被加载了,所以我基本上在前端得到了重复的内容
tq-1.php
首先加载,然后加载主题
page.php
第二次加载文件。
如何避免主题page.php
在我的模板之后加载?
最合适的回答,由SO网友:Stephen Harris 整理而成
这个page_template
是筛选器,而不是操作。具体来说,它过滤要包含的模板的文件路径。
所以你真的不应该在回调中加载任何东西(现在太早了)。相反,只需返回其文件路径。
add_filter( \'page_template\', \'load_tq_templates\' );
function load_tq_templates( $template ) {
if ( is_page( \'transport-quote-1\' ) ) {
if ( $overridden_template = locate_template( \'tq-1.php\' ) ) {
$template = $overridden_template;
} else {
// If neither the child nor parent theme have overridden the template,
// we load the template from the \'templates\' sub-directory of the directory this file is in
$template = dirname( __FILE__ ) . \'/templates/tq-1.php\';
}
}
return $template;
}