Get_Header()的模板层次结构

时间:2014-01-10 作者:Jamie

我正在考虑根据站点的区域使用不同的标题。因此,我们认为可以利用模板层次结构(或者至少重用一些代码)并过滤输出。

这是不是有人试过的?或者有人能告诉我在继承权中选择模板文件的代码的方向吗?我一直找不到它。

2 个回复
SO网友:gmazzap

get_header() 接受参数,使用它可以调用不同的标头。

唯一能get_header() 是否包含在模板中,其中称为文件\'header.php\' 来自子主题(如果存在)或来自主题。

如果使用参数$name, 像这样:get_header( $name), 函数将查找名为\'header-{$name}.php\'.

例如:您想为主页使用不同的标题。

所以您创建了一个名为\'header-home.php\' 然后在文件中\'home.php\' 而不是打电话get_header() 你可以打电话get_header( \'home\' ) 包括\'header-home.php\' 而不是\'header.php\'.

如果有多个标题,则可能在所有文件中重复相同的部分。

为了避免这种情况并使用干代码,您可以提取一些部分并放入单独的文件中,然后通过get_template_part().

例如:

<?php
// header.php
get_template_part(\'header\', \'start\'); // header-start.php contain html tag and other stuff
wp_head(); // should always be called in header
get_template_part(\'header\', \'navigation\'); // header-navigation.php for menu


<?php
// header-home.php
get_template_part(\'header\', \'start\');
wp_head();
get_template_part(\'header\', \'navigation\');
get_template_part(\'header\', \'navigation2\'); // header-navigation2.php for additional nav
get_template_part(\'header\', \'home\'); // header-home.php contain stuff specific to home
然而,这只是一个示例,演示了如何创建不同的头文件,而不必重复代码。

因为奖励是完全对儿童主题友好的(在儿童主题中,您甚至可以使用父主题中的其他“片段”替换一个“片段”)。

编辑有关动态设置$name 基于当前模板的参数,做起来相对容易。

您可以使用template_include 钩子以设置全局可访问变量,并将其用作get\\u头的参数。

add_filter( \'template_include\', \'my_theme_sniff_template\', 99999);

function my_theme_sniff_template( $template ) {
  $info = pathinfo( $template );
  global $my_theme_cur_tmpl;
  $my_theme_cur_tmpl = $info[\'filename\'];
  return $template;
}
使用这样的代码,在模板文件中可以使用

get_header( isset($GLOBALS[\'my_theme_cur_tmpl\']) ? $GLOBALS[\'my_theme_cur_tmpl\'] : \'\' );
the$GLOBALS[\'my_theme_cur_template\'] 将包含当前模板的文件名(不带扩展名)。所以对于home.php 会的\'home\' 等等

所以get_header 将自动搜索\'header-home.php\', \'header-front-page.php\', \'header-single.php\', \'header-page.php\' 等等

但不要担心:如果找不到特定于模板的头文件,则不必为任何模板创建头文件,get_header 将自动加载标准\'header.php\'.

SO网友:Brad Dalton

我用了不同的方法。

您可以使用自定义字段和元框Conditionally load different headers

function featured_headers() 

if ( has_post_thumbnail( $post->ID ) && ( $image = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), 

array( $header_image_width, $header_image_width ) ) ) && $image[1] >=$header_image_width ) :

echo get_the_post_thumbnail( $post->ID, \'large-feature\' ); 

else:
if ( function_exists( \'get_custom_header\' ) ) {

$header_image_width  = get_custom_header()->width;
$header_image_height = get_custom_header()->height;
}
?>
<img src="<?php header_image(); ?>" width="<?php echo $header_image_width; ?>" height="<?php echo $header_image_height; ?>" alt="" />

结束

相关推荐

当尝试向我的登录页面添加一个css文件时,会出现“Headers Always Sent”?

我看过的每一篇关于这个主题的教程都已经过时了,所以我希望这里的人能帮助我。我想为我的wp登录设置样式。带有CSS文件的php页面。但我想以一种在Wordpress更新时不会被覆盖的方式来做。据我所知,根据我读到的图茨,在我的主题函数中使用函数添加它的最佳方式。php文件。不幸的是,人们建议使用的代码并不适合我。这是我添加的代码。<?php function custom_login() { echo \'<link rel=\"stylesheet\" href=\"wplog