我正在写一个插件,我需要替换一些使用过的主题文件。例如,我想添加标题。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()
).
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\'); ?>