大孩子主题(插件)添加header.php(子主题中不存在)

时间:2015-11-10 作者:Erfo

我正在写一个插件,我需要替换一些使用过的主题文件。例如,我想添加标题。php文件,因为此文件位于祖父母主题中,而不是子主题中。

我用以下代码替换了一些模板文件:

function grandchild_include( $template ) {
        if ( file_exists( untrailingslashit( plugin_dir_path( __FILE__ ) ) . \'/templates/\' . basename( $template ) ) )
        $template = untrailingslashit( plugin_dir_path( __FILE__ ) ) . \'/templates/\' . basename( $template );

    return $template;
}
add_filter( \'template_include\', \'grandchild_include\', 11 );
当模板文件位于子主题中时,它会起作用,但当文件不在子主题中(但仅在父主题中)时,它不会起作用。

我需要更换收割台。php。它位于父-子主题中,而不在子主题中,因此过滤器不包含标题。php

我需要替换一个文件(不是模板文件),例如:myname。php(包含在header.php中,带有get_template_part() ).

1 个回复
SO网友:cybmeta

template_include 过滤器用于模板文件,标题。php是一个模板部分。这就是为什么template_include 这不管用。正如我所说,查看get_header() 函数,我看不出有任何方法可以通过该函数重写加载的文件(or any other template part). 但是,因为它是一个模板部分,所以您不需要使用它。您可以在模板文件或include 您可能希望用作标头的任何文件。

例如,从插件文件夹加载的模板文件可能如下所示:

<!doctype html>
<html <?php language_attributes();?>>
  <head>
    <?php wp_head(); ?>
  </head>
  <body id="body" <?php body_class(); ?>>
    <?php if ( have_posts() ) { ?>
      <?php while ( have_posts() ) { the_post(); ?>

      <?php } ?>       
    <?php } ?>
  </body>
</html>
如你所见,我也没有使用get_footer(); 例如get\\u header()和header。php,页脚。php是一个模板部分,您无需使用它。

此外,为了避免在所有模板文件中重复相同的代码,可以使用PHP包含页眉和页脚部分include() 功能:

<?php include(\'myheader.php\'); ?>
  <?php if ( have_posts() ) { ?>
    <?php while ( have_posts() ) { the_post(); ?>

    <?php } ?>       
  <?php } ?>
<?php include(\'myfooter.php\'); ?>

相关推荐