Custom Plugin theme filter

时间:2014-05-09 作者:Peter

我正在创建自定义插件,在我的插件文件中,我有以下内容:

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 在我的模板之后加载?

1 个回复
最合适的回答,由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;       
}

结束

相关推荐