在某些页面上从Wordpress页眉/页脚省略元素的最佳方法

时间:2018-07-26 14:08:16

标签: php html wordpress

我在Wordpress网站上的大多数页面具有相同的页眉和页脚。标题包括表单,菜单和联系按钮。页脚还包含一个表单。

我有许多页面具有完全自定义的布局。例如。 page-personal-training-landing.php和page-beach-body-ready.php。对于这些页面,我省略了页眉和页脚中的元素。

当前,我正在使用'if not'语句在除那些自定义页面之外的所有页面上显示这些元素...

<?php if ((!is_page( 'contact' ))&&(!is_page('beach-body-landing'))&&(!is_page('4-week-body-transformation'))&&(!is_page('beach-body-ready'))&&(!is_page('personal-training-landing'))){?>
<div class="contact-button"></div>
<?php } ?>  

...但是您可以看到这段代码变得很长,在创建新页面时,我会不断为其添加新页面。

我认为模板将是解决方案.. if(!is_page_template('noheadernofooter-page.php')...但不幸的是,Wordpress默认使用该模板布局,然后默认使用自定义页面布局...

Wordpress的页面模板层次结构选择...

  1. 自定义模板文件–分配给页面的页面模板。看到 get_page_templates()。
  2. page- {slug} .php –如果页面slug是最新消息,WordPress将 希望使用page-recent-news.php。
  3. page- {id} .php –如果页面ID为6,WordPress将使用 page-6.php。
  4. page.php
  5. singular.php
  6. index.php

我现在正在考虑,也许我应该使用“高级”自定义字段来添加一些复选框。例如。隐藏标题按钮(是/否),然后查询当前页面上那些按钮的值。

这听起来是最合乎逻辑的解决方案吗?

有人知道没有其他插件怎么做到吗?

谢谢

3 个答案:

答案 0 :(得分:2)

我想我在这里找到了最优雅的解决方案...

https://stackoverflow.com/a/36521754/3656408

“您可以创建新的页眉和页脚文件,例如“ header-mytemplate.php”和“ footer-mytemplate.php”。创建所需的结构。在新的临时文件中,将这些页眉和页脚称为“像这样的get_header('mytemplate');和get_footer(mytemplate);。”

如果有人认为有更好的解决方案,我仍然想知道

答案 1 :(得分:0)

我认为,您的做法已经是正确的方法。我可能会添加include以使其更易于维护,但是在我看来,如果要采用声明的方式。看看我使用的一些代码(针对OP进行了修改)作为示例:

if( (is_page( 'contact' ) ) {

include( 'header-contact.php' ); // include this file on contact page

} elseif( is_page('beach-body-landing') ) {

include( 'header-body-landing.php' ); // include that file on body landing page

} else {

get_header(); // otherwise use our normal header

}

不幸的是,没有钩子可以钩住get_header()get_footer()get_sidebar(),因为那样我们就可以在一个地方完成所有操作。这只是wordpress开发的本质。

编辑

要包含您在下面提到的内容:您可以这样调整:

if( (is_page( 'contact' ) ) {

get_header('contact'); // use `header-contact.php`

} elseif( is_page('beach-body-landing') ) {

get_header('body-landing'); // use `header-body-landing.php`

} else {

get_header(); // otherwise use our normal header

}

希望这会有所帮助!

答案 2 :(得分:0)

这是另一种方法,如前所述,利用get_header()

获取帖子块并将其传递到get_header中。这样,您的页面将始终查找自定义的头文件,但是如果找不到,则WP将默认为标准的header.php:

if ( is_page() ) {
    global $post;
    get_header( $post->post_name );
}

这确实意味着您将需要为每个页面自定义header.php文件,因此最终可能会有数百个头文件,但是您可以使用符号链接来规避该问题。